2016-10-05 4 views
0

Итак, у меня есть этот класс, который содержит некоторые из моих объектов после их создания. Я буду ходить вас через них:Указатель указывает на NULL в векторе

темница является указателем на объект подземелий класса, который имеет некоторые DungeonLayers в векторе имени dungeonLayers который затем держит вектор имени Chambers (темница заполнена)

Когда я запустить этот код:

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 и currentChamber как указывают на NULL, но dungeonLayers.at (0) заполняется DungeonLayer в «подземелье», когда я смотрю в местных жителей на контрольной точке я поставил там. Почему мой текущий слой указывает на NULL?

Я новичок в C++, поэтому я задаю этот вопрос, я мог бы сделать что-то действительно явно неправильное здесь.

+0

И вы установили точку останова после задания, которое я надеюсь? скриншот того, что вы испытываете, будет уместным здесь. –

+0

Попробуйте: DungeonLayer * cl = & (dungeon-> dungeonLayers [0]); – IssamTP

+0

@IssamTP Код показывает нам, что dungeonLayers уже является вектором, содержащим указатели DungeonLayer, не нужно получать адрес из них. –

ответ

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

формально неверно, так как * currentLayer является указателем, что означает:

currentLayer contains address of an object of type DungeonLayer 

Таким образом, вы не правильно инициализировать currentLayer. Правильный способ использовать тип указателя:

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

Это понятно? Или я постараюсь внести лучшую форму.

+0

DungeonLayer * currentLayer = & (dungeon-> dungeonLayers.at (0)); \t У меня это как сейчас, и это работает, код тоже компилируется! Спасибо :) – Jelmer

+0

Добро пожаловать. – IssamTP

Смежные вопросы