文件: bodies.cpp
for (int i=0; i<n; ++i) {
phys_vector pos{xdist(re), ydist(re)};
double mass = mdist(re);
body b{pos.x, pos.y, mass};
bodies.push_back(b);
}
文件: bodies.h
public:
bodies_aos() = default;
private:
std::vector<phys_vector> compute_forces(const simulation_parameters & param);
private:
std::vector<body> bodies;
};
我的目的是定义循环外的所有变量。我的方法(之后我发现它不正确,因为它没有返回相同的结果)是以下一个:
bodies.cpp - &gt;已修改
int i;
double mass;
vector<phys_vector> pos;
std::vector<body> b;
for (i=0; i<n; ++i) {
phys_vector pos{xdist(re), ydist(re)};
mass = mdist(re);
body b{pos.x, pos.y, mass};
bodies.push_back(b);
}
不幸的是,由于变量b
和/或pos
的初始化错误,它没有返回相同的结果,但在编译时不会引发任何错误。
有谁知道如何解决这个问题才能获得与第一种情况相同的结果?
答案 0 :(得分:3)
pos
和b
仍在循环中定义,隐藏了外部定义(由于某种原因,外部pos
变为vector<phys_vector>
。外部变量在循环内部不受影响,因此不会按照您的预期方式进行初始化。我最好的猜测是你想要这样的东西
vector<phys_vector> pos;
for (int i=0; i<n; ++i) {
pos.emplace_back(xdist(re), ydist(re));
double mass = mdist(re);
bodies.emplace_back(pos.back().x, pos.back().y, mass);
}
// use pos and bodies