NullReferenceException
-
Hi Forum-User,
ganz im Sinne eures Slogans "Irgendwer hat immer eine Antwort", wende ich mich mal ganz hoffnungsvoll an euch:
Sitze im Moment an einem C++-Programm, das das Spiel "Twilight Imperium" nachahmen soll. Für die, die das Spiel nicht kennen: Es ist ein Spiel im Weltraum, wo jeder Spieler Planeten einnehmen kann, für die Ressourcen auf den Planeten dann Geld kriegt und sich damit Schiffe bauen kann. Natürlich kann man dann auch mit seinen Flotten gegeinander kämpfen. So, genug der Theorie, jetzt zur Praxis:
Wir haben einen SpielManager eingebaut, der überall bekannt ist und verschiedene Methoden zum Aufbau usw. enthält. In der Methode setUpMap erstellt er also Feld-Objekte für unser Spielfeld und speichert sie in das Map-array aoTheMap[6][6]. Beim Zuweisen dieses Feldes (hier:oMyField) ins array gibts eine NullReferenceException. Wir haben schon alles versucht und sind nun vollkommen ratlos, da diese Methode schon mal funktioniert hat und wir eigentlich nichts verändert haben... Poste euch auch mal unseren Text aus nem anderen Forum (in dem uns keiner hilft:( ):
Also wir haben nach den Konstruktoren in der Basisklasse nochmal geschaut. Jetzt hat jede einzelne Membervariable einen Initialwert (NULL für Pointer).
Wir haben jetzt durch stellenweises auskommentieren zumindest entdeckt, dass der Fehler in den folgenden Zeilen liegt.
FieldGame oMyField; aoTheMap[i][j] = oMyField;aoTheMap ist ein Array vom Typ FieldGame. In der Theorie wird ja bei der Zusweisung in Zeile 2 "oMyField" kopiert, was ja auch ok ist, da das Original nach durchlaufen der Schleife wieder zerstört wird.
Und hier taucht eben besagte Null.ReferenceException auf. Kleiner Blick in den FieldGame - Header
string sFieldType; string sFieldName; Player* sFieldOwner; FieldGame* paoField[6]; bool bHasOwner; vector<Ship> voHomeFleet; vector<Ship> voIntruderFleet;Im Konstruktor der Quelldatei werden alle diese Member [jetzt] initialisiert (Strings bekommen eine Zeichenkette, sFieldOwner zeigt auf NULL, paoField zeigt an jeder Stelle auf NULL und bHasOwner ist erstmal false).
Während des Debuggens, hab ich mir die Werte mal angeschaut und bin dabei auf so einen roten Punkte mit einem Ausrufungszeichen vor einigen Attribute gestoßen. Würde das Bild auch dranhängen, aber geht hier nicht, oder? Naja, vielleicht kann mir ja so jemand sagen, was genau die zu bedeuten haben???
Hoffe sehr, dass ihr uns helfen könnt!
-
FieldGame oMyField;
aoTheMap[i][j] = oMyField;bei der Zuweisung geht der ursprüngliche Inhalt von aoTheMap verloren.
Ihr müsst nach mM den operator= überladen, um eine tiefe kopie zu erhalten.
-
und den Copyconstructor.
-
Danke für die Antworten, hat uns sogar kurzfristig weitergebracht:) Der gesuchte Fehler, der für die Exception zuständig war, war aber ein anderer. Mittlerweile wissen wir den aber auch:)