2011-03-22 51 views
0

我想訪問這些對象列表中包含的對象的成員。訪問對象列表中的非常量成員

我有一個類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 

不知道如何處理這事,如果需要更多的信息/解釋,讓我知道。

在此先感謝!

回答

1

通過使用const_iterator,你說你不想改變列表元素。

如果你想使用std :: list :: iterator。

1

通過使用const_iterator您告訴編譯器您將不會在指向對象的方法上使用此迭代器。一個方法是否修改對象是由其const限定符決定的。例如,如果在class A中有int get() const;之類的方法聲明,那麼此方法將確保它不會修改class A的對象。在你的情況下,似乎Update沒有const限定符,因此編譯器抱怨你不能使用const_iterator調用非const函數。您需要更改迭代器類型std::list<Particle>::iterator

作爲一個方面說明考慮通過引用傳遞list對象而不是在函數中使用指針。

+0

您能否詳細說明參考與指針?如何和一點爲什麼? – Miles 2011-03-22 06:29:04

+0

@Miles:查看本FAQ:http://www.parashift.com/c++-faq-lite/references.html#faq-8.6 – Naveen 2011-03-22 07:19:57