我想访问此类对象列表中包含的对象成员。
我有一个班级CApp
,其成员std::list<Particle> PList
作为粒子列表。
类Particle
有一个成员void Update()
,我对const的理解不能是const,因为它会影响实例(euler集成和东西)。
我想通过PList迭代来更新所有粒子。
粒子构造函数包括:
Particle::Particle(std::list<Particle>* PList_In) {
PList = PList_In;
PList->push_back(*this);
}
以下几次被召唤:
Particle(&PList);
所以列表似乎已经设置好了。作为旁注,如果有人能够在内存(指针,引用)方面解释实际存在的内容,那将是很好的。
但基本上这个错误:
// Update all particles
std::list<Particle>::const_iterator iter;
for (iter = PList.begin(); iter != PList.end(); iter++) {
iter->Update();
}
与
error: passing ‘const Particle’ as ‘this’ argument of ‘void Particle::Update()’ discards qualifiers
不知道如何处理此问题,如果需要更多信息/说明,请与我们联系。
提前致谢!
答案 0 :(得分:1)
通过使用const_iterator,您可以说您不想更改列表元素。
如果需要,请使用std :: list :: iterator。
答案 1 :(得分:1)
通过使用const_iterator
,您告诉编译器您不会在修改指向的对象的方法上使用此迭代器。方法是否修改对象由其const限定符确定。例如,如果int get() const;
中有class A
之类的方法声明,则此方法可以保证它不会修改class A
的对象。在你的情况下,似乎Update
没有const限定符,因此编译器抱怨你不能使用const_iterator
调用非const函数。您需要更改迭代器类型std::list<Particle>::iterator
。
作为旁注,请考虑通过引用传递list
对象,而不是使用函数中的指针。