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;
초기화 내 필드를 나타내는 객체 포인터의 배열을 가지고 이미 방문한 필드 목록과 스택 이렇게 :
std::vector<Field*> visited;
std::vector<Field*> stack;
,210
그런 다음 나중에 내 스택
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:
};
스택에 추가 할 때마다 동일한 Field 참조를 우연히 수정하지 않습니까? 그러면 모든 값이 동일하게되고 마지막으로 추가 된 값과 동일하게됩니다. – Tudor
좀 더 코드를 줄 수 있습니까? 'neighbour'의 유형은 무엇입니까? 어떻게 초기화됩니까? (로컬 변수에 대한 포인터를'vector'에 삽입하는 것처럼 들리지만 더 많은 코드가 없으면 말할 수 없습니다.) –
코드 스 니펫 일 수 있지만,'new Field ** [ ]'처음에는? 또한, 포인터에 대한 포인터에 대한 포인터보다 다차원 배열을 처리하는 더 간단한 방법이 있다고 생각합니다. – slaphappy