An die C++ Programmierer: Problem mit Array von Klasse
Übersicht

![]() |
M0rgensternBetreff: An die C++ Programmierer: Problem mit Array von Klasse |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo Leute.
Ein Kumpel von mir hat für Silvester ein Mensch ärger dich nicht gelötet und gebastelt, also die elektronsichen Teile die man so kennt. Jetzt sollte ich die Software schreiben, hab aber lange nichts mehr mit C++ gemacht. Ich muss sagen, das ganze lief gut. Bis ich soweit war mal ein wenig zu testen. Jetzt sehe ich, dass mir scheinbar total im Speicher rumgefuscht wird. Zur Erklärung: Ich habe eine Klasse Player. Davon gibts ein dynamisches Array, das einfach jeden Spieler beinhaltet, der mitspielt. Hier ist mal die Klasse: Code: [AUSKLAPPEN] class Player
{ public: static int iaPLayerNumbers[4]; //mögliche IDs static int iPlayerAmount; //Anzahl der Spieler static int iaPlayerAll[]; //wird nie benutzt, relikt von früher static const int iCharacterAmount = 4; //Anzahl der Spielfiguren static int iPlayingPlayer; //Spieler der an der Reihe ist int iNumber; //ID des Spielers int iNumberOfThrows; //Anzahl die er werfen darf int iaCharacters[]; //Array für die Figuren int iaBase[]; //Haus des Spielers int iaField[]; //Array für die Positionen auf dem Spielfeld int iaGoal[]; //Ziel des Spielers Player(int pNumber) //Konstruktor { iNumber = pNumber; //ID iNumberOfThrows = 3; //Arrays auf die Startwerte setzen: int iaCharacters[iCharacterAmount] = {-1,-1,-1,-1}; //base =1, Field = 2, Goal = 3 int iaBase[iCharacterAmount] = {1,1,1,1}; int iaField[iCharacterAmount] = {-1,-1,-1,-1}; int iaGoal[iCharacterAmount] = {-1,-1,-1,-1}; } Player() { iNumber = 0; iNumberOfThrows = 3; int iaCharacters[iCharacterAmount] = {-1,-1,-1,-1}; //base = -1, Field = 0-39, Goal = 40-43 int iaBase[iCharacterAmount] = {1,1,1,1}; int iaField[iCharacterAmount] = {-1,-1,-1,-1}; int iaGoal[iCharacterAmount] = {-1,-1,-1,-1}; } } Kurz danach wird dann das Array der Klasse deklariert und noch ein paar andere Dinge für die Klasse initialisiert. Code: [AUSKLAPPEN] int Player::iaPLayerNumbers[4] = {2, 4, 8, 16};
int Player::iPlayerAmount = 0; int Player::iPlayingPlayer = 0; Player * paAllPlayer; //Hier ist das Array Dann gibt es eine Funktion, die vor dem Spielstart das Spielerarray intialisiert und alle Spieler anlegt. Das ist diese Funktion: Code: [AUSKLAPPEN] void InitPlayerClass(int pAmount)//Spieler initialisieren!
{ if (pAmount < 1) //Grenzen einhalten.. Mindestens 1 Spieler pAmount = 1; if (pAmount > 4) //Höchstens 4 Spieler pAmount = 4; Player::iPlayerAmount = pAmount; //Spieleranzahl in der Klasse setzen delete[] paAllPlayer; //Array löschen paAllPlayer = new Player[pAmount]; //Array neu dimensionieren for (int i = 0; i < pAmount; i++) paAllPlayer[i] = Player(Player::iaPLayerNumbers[i]); //Konstruktor aufrufen for (int i = 0; i < pAmount; i++) { //HIER ist das Prolbem: for(int in = 0; in < Player::iCharacterAmount; in++) { paAllPlayer[i].iaBase[in] = 1; paAllPlayer[i].iaField[in] = -1; paAllPlayer[i].iaGoal[in] = -1; paAllPlayer[i].iaCharacters[in] = -1; } cout << "Spieler Nr.: " << i+1 << " hat die ID: " << paAllPlayer[i].iNumber<<"\n"; //Hier wird es deutlich } //Und hier auch nochmal. for (int i = 0; i < Player::iCharacterAmount; i++) { cout << i << ": Basis: " << paAllPlayer[1].iaBase[i] << "\n"; cout << i << ": Feld: " << paAllPlayer[1].iaField[i]<< "\n"; cout << i << ": Ziel: " << paAllPlayer[1].iaGoal[i]<< "\n"; } cout << "\n"; Player::iPlayingPlayer = TossDiceForBeginning(); cout << "Spieler: " << Player::iPlayingPlayer << " beginnt!\n"; } Das Problem ist folgendes: Mir ist aufgefallen, dass die Arraywerte zu Beginn, also nachdem der Konstruktor in der Funktion oben aufgerufen wurde, NICHT 1 und -1 sind sondern irgendwelche zufälligen positiven Zahlen. Also habe ich die eine Forschleife hinzugefügt, die die Arrays nochmal auf -1 bzw 1 setzt. Jetzt ist aber folgendes Problem aufgetreten: ALLE Arrays stehen danach auf -1 obwohl eines ja auf 1 stehen müsste. Außerdem ist die SpielerID, also paAllPlayer[i].iNumber nur bei dem ersten Spieler also paAllPlayer[0].iNumber danach noch richtig. Die anderen stehen alle auf -1. Ich bin wirklich am verzweifeln und kann mir nicht erklären woher das kommt. Kann mir da bitte jemand weiterhelfen? Wäre echt super. Lg, M0rgenstern |
||
![]() |
Hummelpups |
![]() Antworten mit Zitat ![]() |
---|---|---|
mit "int array" deklarierst du sie lokal neu im konstruktorscope | ||
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Gut, das hört sich logisch an.
Dann verstehe ich aber nicht, warum er in der Funktion "InitPlayerClass" (letzter CodeTag) nach dieser Schleife: Code: [AUSKLAPPEN] //HIER ist das Prolbem:
for(int in = 0; in < Player::iCharacterAmount; in++) { paAllPlayer[i].iaBase[in] = 1; paAllPlayer[i].iaField[in] = -1; paAllPlayer[i].iaGoal[in] = -1; paAllPlayer[i].iaCharacters[in] = -1; } 1. Alle Arrays auf -1 stehen hat und 2. Die ID aller Spieler auf -1 steht. Das erschließt sich mir leider nicht. Lg, M0rgenstern |
||
![]() |
maximilian |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] int iaCharacters[iCharacterAmount] = {-1,-1,-1,-1}; //base = -1, Field = 0-39, Goal = 40-43
int iaBase[iCharacterAmount] = {1,1,1,1}; int iaField[iCharacterAmount] = {-1,-1,-1,-1}; int iaGoal[iCharacterAmount] = {-1,-1,-1,-1}; Du solltest dir auf jeden Fall mal ein C/C++-Tutorial durchlesen, bei deinem Code ist so einiges im Argen. Wie bereits von Hummelpups erklärt deklarierst du hier 4 lokale Arrays ohne die Daten der Instanz zu verändern. Außerdem reservierst du aus diesem Grund für die 4 Arraypointer nirgendwo Platz, weswegen in der for-Schleife einige total krumme Sachen passieren. |
||
Variety is the spice of life. One day ignore people, next day annoy them. |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey, danke.
Ich hab jetzt grade das Problem gelöst. Musste die Arrays als Pointer deklarieren und dann mit = new int[4]; initialisieren. Ich hab ein C++ Buch, mich nur mit Pointern noch nie so sehr beschäftigt^^ Dankeschön. lg, M0rgenstern |
||
HavockToxx |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
wenn man mit Classen arbeitet in C++ sind Pointer das A und O in der Suppe. Nur neben bei. | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group