2011-04-16 39 views
0

我很困難,我盡我所能,但我無法解決它。又一個C++列表問題

我想做到這一點:

list<Enemy> *_myEnemies; 
Enemy* _myEnemiesPushBack; 

_myEnemiesPushBack = new Enemy; 
_myEnemiesPushBack->load("earth.png"); 
_myEnemiesPushBack->setPos(150, 150); 
_myEnemies->push_back(_myEnemiesPushBack); //error here 

錯誤:

\init.cpp(41): error C2664: 'void std::list<_Ty>::push_back(_Ty &&)' : cannot convert parameter 1 from 'Enemy *' to 'Enemy &&' 1> with 1> [ 1> _Ty=Enemy 1>
] 1> Reason: cannot convert from 'Enemy *' to 'Enemy' 1>
No constructor could take the source type, or constructor overload resolution was ambiguous

謝謝!

+1

你有一個指向敵人的列表,而不是指向敵人的列表。 – 2011-04-16 19:02:33

+0

你不是指指向敵人列表的指針嗎?當我讀到它時,「指向敵人列表」的意思與「指向敵人的列表」的意思相同。 ;) – jalf 2011-04-16 19:09:09

+1

請不要使用這樣的指針,使用智能指針。 – GManNickG 2011-04-16 19:12:42

回答

3

你不需要指針,在所有。

std::list<Enemy> myList; 

Enemy en; 
en.load("earth.png"); 
en.setPos(150,150); 
myList.push_back(en); 

typedef std::list<Enemy>::iterator iterator; 
for (iterator it = list.begin(), end = list.end(); it != end; ++it) { 
    it->move(); 
} 

我也會鼓勵你去取一本關於C++的地方(初學者),或大約如果這是你特別跨欄STL。不幸的是,C++不是,你可以在沒有指導的情況下進行試驗(起初至少)。

+0

明白了。現在屏幕上有多個敵人! Wohoo!謝謝 – Jesper 2011-04-16 19:38:44

0

你已經得到了敵人的名單,並試圖將一個指向敵人的指針推入該列表。它們不是同一類型。

到這裏看看: Pointers @ cplusplus

+0

你的意思是說:他有一個**指針**給敵人列表。但他應該需要一個**指針**列表給敵人。 – RvdK 2011-04-16 19:05:55

+1

@PoweRoy:我懷疑他需要任何指針! – 2011-04-16 19:30:35

+0

Alf的書是更好的指針imo:https://docs.google.com/fileview?id=0B2oiI2reHOh4M2MzNzYwYzQtMGZkNC00NTljLWJiM2UtOGI0MmRkMTMyZGY4&pli=1 – Muggen 2011-04-16 19:36:44

2

你放錯地方的一個*

list<Enemy*> _myEnemies; 
Enemy* _myEnemiesPushBack; 

_myEnemiesPushBack = new Enemy; 
_myEnemiesPushBack->load("earth.png"); 
_myEnemiesPushBack->setPos(150, 150); 
_myEnemies.push_back(_myEnemiesPushBack); //error here 
+0

非常感謝!我真的坐了幾個小時試圖解決它。 – Jesper 2011-04-16 19:03:56

+0

對不起,最後一個問題。我將如何做一個迭代器?我使它像這個列表 :: iterator它;但它給我錯誤 - > move(); – Jesper 2011-04-16 19:14:55

+1

@Jesper,我認爲它是'(* it) - > move();' – Muggen 2011-04-16 19:37:47