2016-10-23 6 views
3

Ich bin ziemlich neu in C++, und ich habe ein Problem mit dem Speichern von Strukturen in einem Array. Ich habe bereits auf den Brettern darüber gesucht, aber niemand scheint mein spezifisches Problem zu haben.Speichern von Struktur in Array (C++)

Ich erstelle ein textbasiertes RPG-Spiel, das ein dynamisches Array von Sprüchen erfordert. Die Zauber sind structs, definiert wie folgt: -

struct spell 
{ 
    std::string mSpellName; 
    int mRequiredMagicPoints; 
}; 

ich dann erstellen und zwei Instanzen der Struktur initialisieren: -

spell fireBall {"Fire Ball", 10}; 
spell magicMissile {"Magic Missile", 5}; 

Dann in main(), versuche ich, diese beiden Instanzen zu speichern in einem Vektor-Array: -

int main() 
{ 
    std::vector<spell> mSpells[2]; 

    mSpells[0] = fireBall; 
    mSpells[1] = magicMissile; 
} 

jedoch schreit Xcode mich an und liest "keine tragfähige überlastet '='"

I ha Ich habe auch versucht, diese Strukturen in einem traditionellen dynamischen Array zu speichern, aber es wird immer noch nicht kompiliert. Was mache ich falsch?

Vielen Dank im Voraus!

+0

C ist nicht C++ ist nicht C. nicht falsch Tags anwenden. – Olaf

+1

Vielleicht meintest du 'std :: vector mSpells (2);', ein Vektor von 2 Elementen. Was Sie eigentlich geschrieben haben, ist ein Array von 2 leeren Vektoren –

+0

['push_back'] (http://www.cplusplus.com/reference/vector/vector/push_back/) –

Antwort

5

std::vector<spell> mSpells[2]; Definiert ein Array von Vektoren. Es scheint, dass Sie nur einen Vektor von zwei Elementen wollen. So starten Sie aber nur einen Vektor definieren:

std::vector<spell> mSpells; 

Dann haben Sie several options für das Hinzufügen von Elementen zu ihm:

mSpells.push_back(fireBall); 
mSpells.emplace_back("Magic Missile", 5); 
2

Sie erklärt ein Array von zwei vector s von spell s. Sie wollen eindeutig nur ein vector, so dass Sie wollen folgendes sagen:

vector<spell> mSpells(2); 

Dies wird auch mSpells initialisieren zwei Standard-konstruiert haben Elemente.

Vielleicht wollen Sie auch schreiben:

vector<spell> mSpells; 
mSpells.reserve(2); // optional, good idea 
mSpells.push_back(fireBall); 
mSpells.push_back(magicMissile);