访问对象列表中的非const成员

时间:2011-03-22 05:56:52

标签: c++ list stl const

我想访问此类对象列表中包含的对象成员。

我有一个班级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

不知道如何处理此问题,如果需要更多信息/说明,请与我们联系。

提前致谢!

2 个答案:

答案 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对象,而不是使用函数中的指针。