C++ 指针指向向量中的NULL

C++ 指针指向向量中的NULL,c++,c++11,pointers,vector,C++,C++11,Pointers,Vector,所以我有一个类,它在我的一些对象生成后保存它们。我会带你走过去: dungeon是指向dungeon类的对象的指针,该对象在名为DungeonLayers的向量中包含一些DungeonLayers,该向量随后包含一个名为Chambers的向量(dungeon已填充) 当我运行此代码时: Game::Game(std::vector<Enemy>* e, Dungeon* d, Hero* h) { enemies = e; dungeon = d; hero

所以我有一个类,它在我的一些对象生成后保存它们。我会带你走过去:

dungeon是指向dungeon类的对象的指针,该对象在名为DungeonLayers的向量中包含一些DungeonLayers,该向量随后包含一个名为Chambers的向量(dungeon已填充)

当我运行此代码时:

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);
};
Game::Game(std::vector*e,地牢*d,英雄*h){
敌人=e;
地牢=d;
英雄=h;
地下城层*currentLayer=地下城->地下城层.at(0);
腔室*currentChamber=currentLayer->chambers.at(0);
};
currentLayer和currentChamber都指向NULL,但当我在断点处查看局部变量时,地牢层(0)在“地牢”中填充了地牢层。为什么我的currentLayer指向NULL

<>我对C++是新的,所以我问这个问题,我可能会在这里做一些明显错误的事情。
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 
清楚了吗?或者我会试着换一种更好的形式

形式上不正确,因为*currentLayer是指针,这意味着:

currentLayer contains address of an object of type DungeonLayer
因此,您尚未正确初始化currentLayer。 使用指针类型的正确方法:

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

清楚了吗?或者我试着换一种更好的形式。

你在我希望的作业之后设置断点?你正在经历的一个屏幕截图在这里是合适的。试试:DungeonLayer*cl=&(dungeon->dungeonLayers[0])@Jelmer如果这样做有效,你发布的代码就不可能编译,更不用说运行了。。。。。来吧,你已经在这里一年了!仅仅是几件小事,在类成员变量前面加上
m
之类的前缀通常是很好的,这对可读性有很大帮助,而且您可能应该使用初始化列表,并且不需要在构造函数定义后加上分号。我希望您在赋值后设置断点?你正在经历的一个屏幕截图在这里是合适的。试试:DungeonLayer*cl=&(dungeon->dungeonLayers[0])@Jelmer如果这样做有效,你发布的代码就不可能编译,更不用说运行了。。。。。来吧,你已经在这里一年了!只需做几件小事,在类成员变量前面加上
m
之类的前缀通常是好的,这对可读性有很大帮助,而且您可能应该在构造函数定义之后使用初始化列表和分号,这是不必要的。DungeonLayer*currentLayer=&(dungeon->dungeonLayers.at(0));我现在就有了这样的代码,代码也可以编译!谢谢:)地下城图层*当前图层=&(地下城->地下城图层.at(0));我现在就有了这样的代码,代码也可以编译!谢谢:)