2017-01-13 3 views
-2

Ich programmiere einen Space Invaders Klon und ich kämpfe um die Kugeln zu erstellen. Immer wenn ich auf "Space" klicke, soll dem Vektor ein Geschoss hinzugefügt werden, und dann möchte ich sie über eine Schleife bewegen, aber ich verstehe nicht, wie ich es richtig erstellen und handhaben soll.Wie behandelt man einen Vektor von Objekten?

vector<Bullet> bullets(MAXBULLETS); 
int bulletcounter = 0; 
while (1) { 
    Sleep(10); 
    for (int i = 0; i < sizeof(bullets)-1; i++) { 
     bullets[i].Move(0, 1); 
    } 
    if (GetAsyncKeyState(VK_SPACE)) { 
     Bullet *bullet = new Bullet(); 
     bullets[bulletcounter] = bullet; // Here is the error 
     bulletcounter++; 
    } 

Ich kann nicht scheinen, um es richtig zu machen

+4

„Hier ist der Fehler“ sagen uns nicht ** **, was der Fehler ist. Und das Verb "zu handhaben" ist zu vage. Es könnte alles bedeuten. –

+2

Was ist der Fehler? –

+0

Aufzählungszeichen ist ein Vektor von Bullet nicht Bulleet * und Aufzählungszeichen [bulletcounter] = Aufzählungszeichen; Sie ordnen ihm einen Zeiger zu. – user1438832

Antwort

3

bullets ein Vektor ist, der Bullet Objekte vom Typ hält.

Bullet *bullet = new Bullet(); 
bullets[bulletcounter] = bullet; // Here is the error 

Ihr bullet hier ist vom Typ Bullet*. Die zwei inkompatiblen Typen erhalten den Fehler.


Um dies zu beheben, beenden Sie einen Zeiger verwenden und instanziiert nur ein Objekt:

Bullet bullet; 

Dadurch entsteht ein Bullet Objekt den parameterlosen Konstruktor, die Sie dann zu Ihrem bullets hinzufügen können.

Sie allerdings beachten, dass dies nichts gegenwärtig der Fall ist, da Sie Ihre Vektor initialisieren es eine vordefinierte Größe bullets(MAXBULLETS) geben, dies bereits MAXBULLETS Standard erstellte Objekte für Sie erstellt, gebrauchsfertig: mit Graf

Konstrukten der Behälter standardmäßig eingefügte Instanzen von T. Es werden keine Kopien erstellt.


Randbemerkung: stoppen new insgesamt verwendet wird; Dies ist nicht Java oder C#. Wenn Sie ein dynamisch zugewiesenes Objekt benötigen, verwenden Sie einen intelligenten Zeiger. Die meiste Zeit jedoch wird eine automatische Speicherdauer des Objekts gut funktionieren.

+0

Da ich kein Muttersprachler bin, was war dann mit dem "wie"? –

0

Mein Vorschlag

vector<Bullet> bullets; 

while (1) 
{ 
    Sleep(10); 
    for (int i = 0; i < bullets.size(); i++) 
    { 
     bullets[i].Move(0, 1); 
    } 

    if (GetAsyncKeyState(VK_SPACE)) 
    { 
     bullets.push_back(Bullet());    
    } 
Verwandte Themen