다른 클래스의 내 주 클래스에서 사용 된 배열에 액세스하는 데 문제가 있습니다. 내 응용 프로그램은 2D 플랫폼 게임을 만들기위한 편집기입니다. 기본적으로 2D 자산 (세그먼트)을 배치하고 레벨을 구성 할 수 있습니다.C++로 다른 클래스의 한 클래스에서 배열에 액세스
내 메인 클래스는지도 세그먼트 클래스의 배열을 처리합니다. 배열의 각 세그먼트 클래스는지도에서 세그먼트의 위치, 크기 및 회전과 같은 정보를 보유하고이를 화면에 그립니다.
필자는 메인 클래스에서 초기화되고 파일에서 사용 가능한 세그먼트 그리드를 그리는 데 사용되는 기본적으로 패널 (드래그 앤, 크기 조정 가능) 인 별도의 클래스를 사용합니다. 필요한 것은 메인 클래스에서 참조되는 배열에 정보를 추가하는 세그먼트 중 하나를 클릭하는 것입니다.
나는 배열 선언 내 메인 클래스 "맵"이 (간체)
map.h
class Map
{
public:
MapSegment* mapSeg[512];
};
그때 나는를 만들 때 해당 배열의 참조를 보내려고을 패널과 같이, 가능한 세그먼트를 표시하려면
Panel* segmentPane = new SegmentPanel(sf::Rect<float>(200,200,250,200), mapSeg);
세그먼트 패널 헤더가 형성되어 다음과 같이
class SegmentPanel : public Panel
{
public:
SegmentPanel(sf::Rect<float> _position, MapSegment* mapSeg[512];);
void Update();
void Draw(sf::RenderWindow & renderWindow);
void ReadSegments();
private:
std::vector<SegmentDefinition *> segDef;
MapSegment* mapSeg[512];
};
그리고 SegmentPanel CPP :
SegmentPanel::SegmentPanel(sf::Rect<float> _position, MapSegment* mapSeg[512])
: Panel(_position)
{
panelTitle = "Segment Selection";
}
void SegmentPanel::Update()
{
// Update segments
}
void SegmentPanel::Draw(sf::RenderWindow & renderWindow)
{
// Draw default panel items
Panel::Draw(renderWindow);
// Draw segments
}
그러나, SegmentPanel.cpp 클래스의 배열에 요소를 추가 내 주요 Main 클래스에 반영하지 않는 것 - 메모리에 새로운 배열을 만들 것 .
나는 C++로 작업 한 후에도 여전히 C++을 처음 접했습니다!
첫 번째 관찰 및 가능성이 높은 근본 원인 : 수업이 ** [Rule of Three] (http://stackoverflow.com/questions/4172722/what-is-the-rule-of-three) *를 따르지 않음 * *. –
C# 백그라운드에서와 같이 대신'std :: vector'를 사용해야합니다. 놀라운 포인터를 다루는 일은 지루할 것입니다. – ashgkwd
팁 주셔서 감사합니다 - 이제 std :: vector를 사용하도록 약간 변경했습니다 –