我有一个非常快速的问题。我在我的代码中偶然发现了一个(奇怪的)错误。我有一个类,其中包含另一个类的实际对象的容器(矢量)。在一个函数中,我尝试更新对象的状态,这应该不是问题。在本地,在函数内部,它工作正常。对象被改变了。但是,当我退出成员函数(或只是for循环!)并读取对象'状态我看到没有任何改变!很奇怪。你们知道为什么吗?我没有使用指向向量中的对象的指针,这可能是问题吗?以下是重要代码的片段:
template<typename T>
class Particle
{
private:
std::array<T,3> position;
std::array<T,3> nextPosition;
//[...]
public:
void SetPosition(T rx, T ry, T rz);
void SetPosition(std::array<T,3> update);
void SetNextPosition(std::array<T,3> update);
std::array<T,3> GetNextPosition();
std::array<T,3> GetPosition();
//[...]
};
template <typename T>
void Particle<T>::SetPosition(std::array<T,3> update){this->position = update;}
template <typename T>
std::array<T,3> Particle<T>::GetPosition(){return this->position;}
template <typename T>
std::array<T,3> Particle<T>::GetNextPosition(){return this->nextPosition;}
Box类有std::vector<Particle<T> > pList;
作为私有变量,我正确加载了粒子。一切顺利,我可以改变状态,直到我调用以下函数,该函数应该移动粒子的位置状态(但是当它在for循环之外时它不会!)。所以说清楚;当我打印出for循环中对象的状态时,它似乎工作得很好。但是当for循环完成/终止时,对象根本没有改变!
template <typename T>
void Box<T>::Simulate(unsigned int timestep, T verletstep){
//[...]
for(auto x:this->pList) x.SetPosition( x.GetNextPosition() );
//[...]
}
谁能明白为什么? 欣赏它!
答案 0 :(得分:0)
你到处都在制作副本,尤其是在这里:
for(auto x:this->pList)
开始介绍使用引用;例如:
for(auto& x:this->pList)