순환 의존성을 피하기 위해 다른 클래스의 선언 클래스 변수를 전달할 수 있습니까? 예 :클래스 변수의 전방 선언
//another file
class Engine;
extern vector<Block*> Engine::MapBlocks;
//Engine.h
class Engine
{
public:
vector<Block*> MapBlocks;
};
가능한가요?
순환 의존성을 피하기 위해 다른 클래스의 선언 클래스 변수를 전달할 수 있습니까? 예 :클래스 변수의 전방 선언
//another file
class Engine;
extern vector<Block*> Engine::MapBlocks;
//Engine.h
class Engine
{
public:
vector<Block*> MapBlocks;
};
가능한가요?
아니요, 시도하려는 작업을 수행 할 수 없습니다. 비 정적 클래스 멤버를 클래스 정의 외부에서 선언 할 수는 없습니다. 그러한 일이 허용되면 모든 코드가 임의의 클래스를 임의로 수정할 수 있습니다 (예 : 실제로 클래스의 일부가 아닌 멤버를 선언함으로써). 논리적으로는 클래스 (예 : 캡슐화)를 완전히 사용하려는 의도가 없습니다.
그러나 정의가 표시되지 않은 채 클래스 유형에 대한 포인터를 전달하고 저장할 수 있습니다. 컴파일러는 컨테이너에 포인터를 저장하기 위해 Block
의 정의의 가시성을 확보 할 필요가 없기 때문에이 경우
#include <vector> // necessary for use of std::vector
class Block;
class Engine
{
public:
std::vector<Block*> MapBlocks;
// preferably declare constructors and/or other member functions
// that initialise MapBlocks appropriately to needs
};
이 작동합니다. 당연히
그 멤버 함수Block
(예컨대
some_engine.MapBlocks.push_back(new Block)
)를 인스턴스화 또는 통화 시도하는 코드 (예
some_engine.MapBlocks[some_valid_index]->some_member_function()
)는 클래스
Block
의 정의뿐만 아니라 순방향 선언의 시야에 의존한다.
귀하의 클래스 선언이 완료되어야합니다, 당신은 그것을 분할하거나 부분적으로 선언 할 수 없습니다.
실제 문제에 관해서 질문하신 경우, 어쨌든 도움을 드릴 수 있습니다. 가장 가능성이있는 해결책은이 추상적 인 질문이 아닌 것입니다.
Nope가 작동하지 않습니다. – CoryKramer
C++에는 부분 클래스가 없습니다. – Ron