2016-10-05 2 views
0

私はオブジェクトが生成された後にこのクラスを保持しています。私はそれらを説明します:ポインターがベクトル内のNULLを指している

ダンジョンは、チェンの名のベクトルを保持しているdungeonLayersという名前のベクトルで、いくつかのDungeonLayersを保持しているダンジョンクラスのオブジェクトへのポインタである(ダンジョンが満たされている)

をするとIこのコードを実行します。

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で満たされています。 currentLayerがNULLを指すのはなぜですか?

私はこの問題を尋ねるので、私はC++の初心者です。ここで間違いがあります。

currentLayer contains address of an object of type DungeonLayer 

をですから、正しくcurrentLayerを初期化していない:* currentLayerはつまり、ポインタであるため、

+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); 

は、正式に間違っています。ポインタ型を使用する 正しい方法:

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

はこの明確ですか?あるいは、私はより良い形にしようとします。

+0

DungeonLayer * currentLayer =&(dungeon-> dungeonLayers.at(0)); \t私はこれを今のようにしています。それが動作し、コードもコンパイルされます!ありがとう:) – Jelmer

+0

ようこそ。 – IssamTP

関連する問題