기본적으로 두 개의 다른 헤더 파일 아래에 두 클래스가 있습니다. ToolBar
및 NewMenu
(더 나은 이해를 위해 실제 클래스 이름을 사용합니다.)이 두 클래스는 모두 namespace map
입니다. 이제 클래스 ToolBar
안에 선언 된 클래스 NewMenu
이 있습니다. 그러나 이벤트를 처리하지만 ToolBar
클래스를 매개 변수로 사용하여 발생하는 이벤트를 기반으로 특정 정보를 전달하고 편집하는 NewMenu
(HandleEvents(..., ToolBar& toolBar)
)의 멤버 함수가 있습니다. 그러나 이것은 순환 종속성을 유발하는 것으로 보입니다.C++ A 클래스를 B 클래스의 멤버 함수에 대한 매개 변수로 사용하는 클래스 B 클래스 A의 멤버가
그래서 기본적으로 ... 나는
// ToolBar.h
#include "NewMenu.h"
namespace map
{
class ToolBar
{
private:
NewMenu myNewMenu;
public:
/* ... */
}
} // namespace map
//////////////////////////
// NewMenu.h
#include "ToolBar.h"
namespace map
{
class NewMenu
{
private:
/* ... */
public:
void HandleEvents(ToolBar& toolBar)
{
/* ... */
//Use ToolBar function
toolBar.tileMap.Create();
/* ... */
}
/* ... */
}
} // namespace map
그러나,이 순환 의존성을 야기 ... 이런 식으로 시작했다. 그래서 그 다음이 문제를 해결하려고 몇 가지 조사를했고, 이런 걸 가지고 ...
// ToolBar.h
#include "NewMenu.h"
namespace map
{
class ToolBar
{
private:
NewMenu myNewMenu;
public:
/* ... */
}
} // namespace map
//////////////////////////
// NewMenu.h
//#include "ToolBar.h"
namespace map
{
class ToolBar; //(I presume) to make a temporary reference to class ToolBar.
class NewMenu
{
private:
/* ... */
public:
void HandleEvents(ToolBar& toolBar)
{
/* ... */
//Use ToolBar function
toolBar.tileMap.Create(); //Error: incomplete type is not allowed
/* ... */
}
/* ... */
}
} // namespace map
나는 100 % 확실하지 않다,하지만, 이것은 기본적으로 문제를 해결해야 모여 무엇을 기반으로 (?), 그러나 이제는 HandleEvents()
함수에서 "오류 : 불완전한 유형이 허용되지 않습니다."라는 오류가 발생합니다. 그래서 내 질문은, 내가 무엇을 잘못하고 어떻게이 순환 종속성을 해결합니까?
(측면 참고 :. 나는 내 연구 here의 일부를 가지고 가끔 난 그냥 이해하는 약간 다른 방식을 보여 것을 필요하지만)
당신의 시간과 도움을 주셔서 감사합니다.
실제로 참조가 중요하지 않습니다. 불완전한 형식은 함수 선언의 매개 변수로 사용할 수 있지만 정의는 사용할 수 없습니다. 모든 필요한 유형의 정의 이후 클래스 외부로 함수 본문을 이동하는 것이 중요한 것입니다. –
이것은 더 많은 톤을 돕습니다. 나는 .cpp 파일을 완전히 고려하는 것을 완전히 잊었다! 고맙습니다! NewMenu.cpp에'ToolBar.h'를 포함 시켰기 때문에 완벽하게 작동합니다. – Uulamock