2014-01-06 42 views
1

我做了自定義對象的名單這裏是我的代碼部分:迭代器自定義對象指針列表

list<Carre*> mechants; 
mechants.push_front(new Carre(joueur.getX()-1500,joueur.getY()+100));left = false; 
for(list<Carre*>::iterator i=mechants.begin(); i != mechants.end(); ++i) 
{ 
    *i->IA(joueur); 
} 

錯誤:「請求成員「IA」 * i.std :: _ List_iterator < _TP> :: operator - >()',它的指針類型爲'Carre *'(也許你打算使用' - >'?

Mayby問題是我做了一個Carre *列表,我應該嘗試做一個Carre列表,但我不知道如何在這種情況下添加它們。 我已經嘗試過** i-> IA(joueur)沒有成功; 我從來沒有使用自定義對象的列表之前,所以我不知道該怎麼做。

編輯:IA(Joueur)是類的功能卡雷

回答

2

*i->IA(joueur);試圖做*(i->IA(joueur));

你需要的是周圍i括號:

(*i)->IA(joueur);

+0

好,謝謝,我假設由於它是一個指針指針,所以你的箭頭不足以「保護它」免於編譯器的錯誤理解。 – user3162867

+0

@ user3162867:問題是來自'*'的解引用正在應用於'IA'的返回值,而不是'i',這就是爲什麼需要括號的原因。就像你最初寫的那樣,它和'*((* i).IA(joueur)')是一樣的;'但是你真正想要的是'(*(* i))。IA(joueur);'(或者等價地,'(* i) - > IA(joueur);')。原來,由於運算符的優先級和相關性,'*'和' - >'分別引用了兩個不同的東西(分別爲'IA'的返回值和'i')。添加圓括號確保'i'被解除引用兩次,並且'IA'的返回值不被解除引用。 – Cornstalks

+0

好吧,我明白了,那種我不應該忘記的東西,感謝您的幫助,請問如何讓我的問題「解決」? – user3162867