c++ - 在类中创建向量(二维数组)的向量 - 错误:C++ 需要所有声明的类型说明符
问题描述
因此,我在程序上编写了一种在 C++ 中使用 Runge-Kutta 4(RK4) 方法对方程进行积分的方法。我目前正在尝试创建一个 RK4 类来为我的程序添加更多功能。但是,当我在类中设置二维数组时,我收到“C++ 需要所有声明的类型说明符”错误,这是我在原始程序中没有收到的。
起初,我使用的是命名空间 std;,但是我遇到了一个答案,说这是不好的编程习惯,所以我删除了该行并改为调用 std::vector。我还确保包含矢量库,但无济于事。
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <vector>
class RK4 {
public:
RK4(double x_i, double y_i, double z_i, double vx_i, double vy_i, double vz_i);
//time-related stuff
double dt = 0.01;
int numtimes = 1000;
int numvar = 3;
double mu = 398589590898200.0;
//setting up variables
std::vector<vector<double> > position(numtimes,vector<double>(numvar));
std::vector<vector<double> > velocity(numtimes,vector<double>(numvar));
std::vector<vector<double> > rk1(numtimes,vector<double>(numvar));
std::vector<vector<double> > rk2(numtimes,vector<double>(numvar));
std::vector<vector<double> > rk3(numtimes,vector<double>(numvar));
std::vector<vector<double> > rk4(numtimes,vector<double>(numvar));
std::vector<vector<double> > vk1(numtimes,vector<double>(numvar));
std::vector<vector<double> > vk2(numtimes,vector<double>(numvar));
std::vector<vector<double> > vk3(numtimes,vector<double>(numvar));
std::vector<vector<double> > vk4(numtimes,vector<double>(numvar));
这就是我在原始程序中构建代码的方式,没有问题:
#include <iostream>
#include <ostream>
#include <cmath>
#include <vector>
using namespace std;
int main(){
// time related things
//double t_i = 0; // initial time
double dt = 0.01; // time step
int numtimes = 10000; // how many steps taken
vector<vector<double> > position(numtimes,vector<double>(numvar));
vector<vector<double> > velocity(numtimes,vector<double>(numvar));
vector<vector<double> > rk1(numtimes,vector<double>(numvar));
vector<vector<double> > rk2(numtimes,vector<double>(numvar));
vector<vector<double> > rk3(numtimes,vector<double>(numvar));
vector<vector<double> > rk4(numtimes,vector<double>(numvar));
vector<vector<double> > vk1(numtimes,vector<double>(numvar));
vector<vector<double> > vk2(numtimes,vector<double>(numvar));
vector<vector<double> > vk3(numtimes,vector<double>(numvar));
vector<vector<double> > vk4(numtimes,vector<double>(numvar));
}
我不太清楚为什么这个调用在我的原始(程序)程序中有效,但在我当前的程序中无效。
解决方案
使用类,您不能在函数之外初始化成员。您可以在构造函数中分配它们。
此外,您在一堆需要“std::vector”的地方写了“vector”。这应该解决它:
#include <math.h>
#include <stdio.h>
#include <iostream>
#include <vector>
class RK4 {
public:
RK4(double x_i, double y_i, double z_i, double vx_i, double vy_i, double vz_i) {
double dt = 0.01;
int numtimes = 1000;
int numvar = 3;
double mu = 398589590898200.0;
//assigning the vectors
position = std::vector<std::vector<double> >(numtimes, std::vector<double>(numvar));
velocity = std::vector<std::vector<double> >(numtimes, std::vector<double>(numvar));
rk1 = std::vector<std::vector<double> >(numtimes, std::vector<double>(numvar));
rk2 = std::vector<std::vector<double> >(numtimes, std::vector<double>(numvar));
rk3 = std::vector<std::vector<double> >(numtimes, std::vector<double>(numvar));
rk4 = std::vector<std::vector<double> >(numtimes, std::vector<double>(numvar));
vk1 = std::vector<std::vector<double> >(numtimes, std::vector<double>(numvar));
vk2 = std::vector<std::vector<double> >(numtimes, std::vector<double>(numvar));
vk3 = std::vector<std::vector<double> >(numtimes, std::vector<double>(numvar));
vk4 = std::vector<std::vector<double> >(numtimes, std::vector<double>(numvar));
}
//time-related stuff
double dt = 0.01;
int numtimes = 1000;
int numvar = 3;
double mu = 398589590898200.0;
//declaring vectors
std::vector<std::vector<double> > position;
std::vector<std::vector<double> > velocity;
std::vector<std::vector<double> > rk1;
std::vector<std::vector<double> > rk2;
std::vector<std::vector<double> > rk3;
std::vector<std::vector<double> > rk4;
std::vector<std::vector<double> > vk1;
std::vector<std::vector<double> > vk2;
std::vector<std::vector<double> > vk3;
std::vector<std::vector<double> > vk4;
};
int main() {
RK4 r(1, 1, 1, 1, 1, 1);
return 0;
}
推荐阅读
- json - XML to JSON:转换为 JSON 后如何重构节点顺序
- vue.js - Nuxt.js - npm generate 后,外部组件在另一个组件中不起作用
- node.js - 如何在无需全局安装 ts-node 或 npx 的情况下完全运行 nodemon + ts-node + typescript?
- c++ - C ++:如何初始化包含具有给定键的指针列表的映射?
- azure-pipelines - 我们是否需要设置“isOutput=true”以将变量用作同一作业中任务的任务输入?
- huffman-code - 霍夫曼编码中如何存储频率表?
- javascript - 单击时的 Jquery 返回一个值并在另一个函数中使用它
- python - 如何恢复 pip freeze > requirements.txt?
- ansible - 错误!'copy' 不是 Play 的有效属性
- c++ - 拥有“受保护的非虚拟析构函数”与“受保护的虚拟析构函数”有什么好处?