2016-10-05 2 views
0

So habe ich diese Klasse, die einige meiner Objekte enthält, nachdem sie generiert werden. Ich werde Sie durch sie gehen:Zeiger zeigt auf NULL in Vektor

Kerker ein Zeiger auf ein Objekt der Dungeon-Klasse ist, die einige DungeonLayers in einem Vektor namens dungeonLayers hält, die dann einen Vektor von Chambers Name hält (Kerker gefüllt ist)

Als ich diesen Code ausführen:

Game::Game(std::vector<Enemy>* e, Dungeon* d, Hero* h) { 
    enemies = e; 
    dungeon = d; 
    hero = h; 
    DungeonLayer *currentLayer = dungeon->dungeonLayers.at(0); 
    Chamber *currentChamber = currentLayer->chambers.at(0); 
}; 

currentLayer und currentChamber beide auf NULL aber die dungeonLayers.at (0) mit einem DungeonLayer in ‚Kerker‘ gefüllt, wenn ich in den Einheimischen am Haltepunkt sehe ich dort setzen. Warum zeigt mein currentLayer auf NULL?

Ich bin neu in C++, deshalb stelle ich diese Frage, ich könnte hier etwas wirklich offensichtlich falsch machen.

+0

Und Sie setzen den Breakpoint nach der Zuweisung ich hoffe? Ein Screenshot von dem, was Sie gerade erleben, wäre hier angebracht. –

+0

Versuch: DungeonLayer * cl = & (Dungeon-> DungeonLayers [0]); – IssamTP

+0

@IssamTP Der Code zeigt uns, dass DungeonLayers bereits ein Vektor ist, der DungeonLayer-Zeiger enthält, ohne dass man die Adresse von ihnen erhalten muss. –

Antwort

3
DungeonLayer *currentLayer = dungeon->dungeonLayers.at(0); 
Chamber *currentChamber = currentLayer->chambers.at(0); 

formal nicht korrekt ist, weil * currentLayer ein Zeiger ist, das heißt:

currentLayer contains address of an object of type DungeonLayer 

So haben Sie nicht richtig currentLayer initialisiert. korrekter Weg, um den Zeigertyp zu verwenden:

DungeonLayer *currentLayer = &(dungeon->dungeonLayers[0]); //address of something 

Ist das klar? Oder ich werde versuchen, eine bessere Form zu geben.

+0

DungeonLayer * currentLayer = & (Dungeon-> dungeonLayers.at (0)); \t Ich habe es jetzt so und das funktioniert, der Code kompiliert auch! Danke :) – Jelmer

+0

Gern geschehen. – IssamTP