C++(迷路)で小さくシンプルなゲームを実装する必要があり、今はいくつかの問題があります。オブジェクトポインタ付きのC++ベクトル
一部抜粋:私は必要な迷路を作成する場合
for (n = 0; n < MAZE_WIDTH; n++) {
this->maze[n] = new Field*[MAZE_HEIGHT];
for (p = 0; p < MAZE_HEIGHT; p++) {
this->maze[n][p] = new Field();
this->maze[n][p]->x = n;
this->maze[n][p]->y = p;
}
}
: 私は迷路迷路の
Field*** maze;
initの中の私のフィールドを表すオブジェクトポインタの配列を持っていますすでに訪問したフィールドのリストとスタック だから私はした:
std::vector<Field*> visited;
std::vector<Field*> stack;
は、その後、私は私のスタック
stack.push_back(neighbour);
にフィールド*を入れたい。しかし、このプッシュした後、オブジェクトのすべての値が間違っています。私はすでにこのトピックに関するいくつかのスレッドを赤
私がしようとした場合でも
neighbour = stack.back();
すべての値はcompletly異なるものであり、私はポインタではなくオブジェクトのベクトルを選んだ理由です。
私の責任はどこですか?
編集:要求されたとして いくつかのより抜粋:私はチームメイト自体
this->maze = new Field**[MAZE_WIDTH];
フィールドにメモリを割り当てるもちろん
は次のようになります単純なクラスです:
class Field {
public:
Field();
~Field();
bool w_left;
bool w_right;
bool w_front;
bool w_back;
unsigned int x;
unsigned int y;
private:
};
スタックに追加するたびに同じフィールド参照を偶然変更することはありませんか?これにより、すべての値が同じで、最後に追加された値と同じになります。 – Tudor
もう少しコードを教えてください。例えば、 "neighbour"のタイプは何ですか?どのように初期化されますか? (ローカル変数へのポインタを 'vector'に挿入しているように聞こえるかもしれませんが、より多くのコードを書くことは不可能です。) –
コードスニペットかもしれませんが、' new Field ** [ ] '最初に?また、ポインタへのポインタへのポインタより多次元配列を扱う方が簡単だと思います。 – slaphappy