2

안녕하세요. 전달 선언 작업에 어려움이 있습니다. 그렇게해야하지만 전달 된 클래스 함수에 액세스 할 수 없습니다.C++ 전달 선언 및 불완전 유형

#include "Tab.h" 

Tab::Tab(Window *parent) { 
    m_parent = parent; 
} 

Tab::callParentFunction() { 
    m_parent->doSome(); // Error 
} 

컴파일러 나를 반환, Tab.cpp

class Window; // forward delcaration 

class Tab { 

public: 
    class Tab(Window *parent); 
    void callParentFunction(); 

private: 
    Window *m_parent; 
}; 

그리고 마지막으로 : 여기

#include "Tab.h" // Needed because Window will create new Tabs 

class Window { 
    public: 
    ... 
    void doSome(); 

}; 

가 Tab.h입니다 : 여기

내 Window.h입니다 다음 오류 : 불완전한 유형의 'struct Window'사용이 잘못되었습니다

부모 함수에 액세스하려면 어떻게해야합니까? 이미 탭을 만들려면 Tab.h가 포함되어 있습니다. 내가 할 수 없다면, 내가 무엇을하라고 조언합니까?

+1

'#include Tab.h' 실제 코드인가요? –

+0

오타가 잘못 됐다는 뜻입니까? #include "Tab.h" –

답변

6

당신은, 그래서

m_parent->doSome(); 

전화를 위해 Window 클래스의 정의가 필요 Tab.cppWindow.h을 포함한다.

+0

와우 작동합니다! 뉴비 튜토리얼에 따르면 .cpp 파일의 헤더를 포함하는 것이 금지되어 있다고 생각했습니다. –

+0

@ AlexandreToqué 글쎄, 이미'.cpp' 파일에 헤더를 포함하고있었습니다 (예 :'Tab.c'의'Tab.h'). 튜토리얼을 오해했습니다. – juanchopanza

+0

하하, 내 이전 의견을 신경 쓰지 마라, 나는 정말로, 정말로 혼란 스러웠다. –