2016-06-13 24 views
1

Ich habe auf ein kleines Problem gestoßen und ich habe überall gesucht, aber ich glaube, dass ich in die falsche Richtung schaue. Ich habe hier einen Account erstellt, in der Hoffnung, ein kleines Problem zu lösen, das ich habe. Ich bin gerade dabei, ein RPG zu programmieren und wenn ich versuche, ein Zeichen "Zaubersprüche" anzuzeigen, kann ich nur [3] anzeigen. [0] [1] [2] stürzt mein Spiel ab. Das Spiel ist in C++.Anzeigeelement aus Zeiger struct

Beispiel meines Codes unter:

meine Struktur erstellen:

struct Fighter { 
    int HP;   //max 999 
    int maxHP; 
    int MP;   //max 999 
    int maxMP; 
    int STR;  //max 255 
    int CON;  //max 255 
    int AGL;  //max 100 
    bool dead; 
    const char* Magic[]; 
}; 

Fighter * player = new Fighter[5]; 

initialisieren und Elemente mit diesen Parametern für 4 Gruppenmitglieder zuweisen:

void InitPlayer(int pClass, int p) 
{ 
    if(pClass == 0) //Knight 
    { 
     player[p].maxHP = 750; 
     player[p].HP = player[p].maxHP; 
     player[p].maxMP = 0; 
     player[p].MP = player[p].maxMP; 
     player[p].STR = 200; 
     player[p].CON = 0; 
     player[p].AGL = 35; 
    } 
    else if(pClass == 1) //Ninja 
    { 
     player[p].maxHP = 675; 
     player[p].HP = player[p].maxHP; 
     player[p].maxMP = 0; 
     player[p].MP = player[p].maxMP; 
     player[p].STR = 175; 
     player[p].CON = 0; 
     player[p].AGL = 80; 
     player[p].Magic[0] = "Cure"; 
     player[p].Magic[1] = "Haste"; 
     player[p].Magic[2] = "Sleep"; 
    } 
    //... More Character code 
} 

Hier zeichne ich/print " Magic "auf den Bildschirm:

Printf_xy(123,223,player[0].Magic[0]); //Crash 
Printf_xy(123,233,player[1].Magic[0]); //Crash 
Printf_xy(123,243,player[2].Magic[0]); //Crash 
Printf_xy(123,253,player[3].Magic[0]); //Prints "Cure" does not crash 

Wie Sie sehen können, wird es funktionieren, aber nur, wenn ich Player [3] anzeigen. Ich bin sicher, ich vergesse etwas zu tun oder etwas falsch zu initialisieren. Jede Hilfe würde sehr geschätzt werden.

+0

Sind die ersten drei Spieler vom Typ Ritter? – Alex

+0

Nein, zum Beispiel könnte Spieler [0] auch auf Ninja eingestellt sein und wenn er versucht, "Magie" anzuzeigen, stürzt er ab. – malachi

+0

'const char * Magic [];' ist in C++ nicht erlaubt; Wenn dein Compiler sich nicht beschwert, dann schau dir an, welche Kompilierungsflags du verwendest –

Antwort

1

Magic ist ein Array mit der Länge Null - wenn Sie ihm etwas zuweisen oder versuchen, auf Magic[0] zuzugreifen, greifen Sie außerhalb der Arraygrenzen zu.

Wenn Sie die maximale Anzahl der Magie Einträge kennen verwenden Sie benötigen, dass als Array-Größe, so etwas wie:

const int MagicLimit = 10 

... 

const char* Magic[MagicLimit]; 

Noch besser ist es, wenn Sie C++ verwenden, verwenden Sie eine std :: vector zu halten die magischen Zeichenfolgen (benutzen Sie auch std :: string), auf diese Weise können Sie leicht die Länge der Liste bestimmen.

Zum Beispiel:

std::vector<std::string> Magic; 
+0

The Dark danke für diesen Vorschlag! Es hat funktioniert und jetzt kann ich mit meinem Spiel weitermachen. – malachi