2017-11-05 15 views
0

내 프로그램에는 RPG 게임에서지도를 나타내는 매우 간단한 구조가 있습니다. 그래서 같은 지역 객체로 만들어, "그리드"를, 2 차원 배열로,지도 클래스가 : 맵 생성자에서 다음 구성을 통한 부모 클래스 액세스

#pragma once 
#include "Area.h" 

class Map 
{ 
public: 
    Map(); 
    ~Map(); 

    Area Grid[10][10]; 
}; 

가 :

Map::Map() 
{ 
for (int y = 0; y < 10; y++) { 
    for (int x = 0; x < 10; x++) { 
     Grid[x][y] = Area(); 
    } 
} 
} 

내가 지역에 대한 싶습니다 객체가 Map 객체의 특정 값에 액세스 할 수 있어야하며 객체 객체를 생성 할 때 map 클래스에 대한 참조를 포함 할 수 있으므로 부모 객체를 참조 할 수 있습니다. 그러나 이렇게하려면, 나는 포함 루프를 만들 것이고, 일반적으로 매우 좋지는 않지만 Area.h에 #include "Map.h"를 포함시켜야합니다. 그렇다면 각 영역 객체에있는 영역의 부모에 대한 참조를 주입하는 방법은 무엇입니까? 사전에 도움을 주셔서 감사합니다.

+0

XY 문제와 비슷합니다. 정확히 목표는 무엇입니까? – skypjack

+0

@skypjack 그냥 Area 객체가 작성한지도에 대한 참조를 갖기를 원합니다. –

+0

전달 선언 클래스 개체에 대한 참조 또는 포인터를 사용하는 함수 또는 생성자를 선언 할 수 있습니다. –

답변

1
// Area.h 
#pragma once 
struct Map; 

struct Area { 
    Map* map = nullptr; 
    Area() {} 
    explicit Area(Map* m) : map(m) {} 
}; 

Area.cpp에 정의 된 일부 기능 (Map.h 포함)이 필요할 수 있습니다. 예제 코드를 간략하게하기 위해 그냥 두었습니다.

// Map.h 
#pragma once 
#include "Area.h" 

struct Map 
{ 
    Map(); 
    ~Map(); 

    Area Grid[10][10]; 
}; 

// Map.cpp 
#include "Map.h" 

Map::Map() 
{ 
    for (int y = 0; y < 10; y++) { 
     for (int x = 0; x < 10; x++) { 
      Grid[x][y] = Area(this); 
     } 
    } 
} 

Map::~Map() {} 

// main.cpp 
#include "Map.h" 
int main() 
{ 
    Map m; 
    return 0; 
}