Переместите эти std::vector
инициализации в конструктор RK4
и используйте синтаксис списка инициализации члена для их инициализации:
#include <iostream>
#include <vector>
class RK4
{
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;
public:
RK4(double x_i, double y_i, double z_i, double vx_i, double vy_i, double vz_i) :
position(numtimes, std::vector<double>(numvar)),
velocity(numtimes, std::vector<double>(numvar)),
rk1(numtimes, std::vector<double>(numvar)),
rk2(numtimes, std::vector<double>(numvar)),
rk3(numtimes, std::vector<double>(numvar)),
rk4(numtimes, std::vector<double>(numvar)),
vk1(numtimes, std::vector<double>(numvar)),
vk2(numtimes, std::vector<double>(numvar)),
vk3(numtimes, std::vector<double>(numvar)),
vk4(numtimes, std::vector<double>(numvar))
{}
};
Учитывая порядок переменных-членов, вы также можете сделать это (но для этого необходимо, чтобы position
было объявлено перед любым другим вектором):
#include <iostream>
#include <vector>
class RK4
{
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;
public:
RK4(double x_i, double y_i, double z_i, double vx_i, double vy_i, double vz_i) :
position(numtimes, std::vector<double>(numvar)),
velocity(position),
rk1(position),
rk2(position),
rk3(position),
rk4(position),
vk1(position),
vk2(position),
vk3(position),
vk4(position)
{}
};
Причина, по которой это работает, заключается в том, что position
и все другие векторы имеют одинаковый размер и начинаются с одинаковых значений. Так что немного проще инициализировать другие векторы с помощью position
. Но опять же, это требует, чтобы position
было объявлено в классе, прежде чем другие векторы будут работать.