2

您好,我在使用前向聲明時遇到了問題。我無法訪問轉發的類函數,但我需要這樣做。C++前向聲明和不完整類型

這是我在window.h:

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

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

}; 

這裏是Tab.h:

class Window; // forward delcaration 

class Tab { 

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

private: 
    Window *m_parent; 
}; 

最後,Tab.cpp:

#include "Tab.h" 

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

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

編譯器返回我以下錯誤: 無效使用不完整的類型'struct Window'

如何知道它已經包含Tab.h來創建標籤頁? 如果我不能,你建議我做什麼?

+1

'#include Tab.h'是你的實際代碼嗎? –

+0

你的意思是我犯了一個錯字嗎?應該是#包括「Tab.h」 –

回答

6

您需要Window類的定義,以便調用

m_parent->doSome(); 

因此,包括Tab.cppWindow.h

+0

哇,它的工作原理!根據新手教程,我認爲在.cpp文件中包含頭文件是被禁止的 –

+0

@AlexandreToqué,您已經在'.cpp'文件中包含頭文件(例如'Tab.cpp'中的'Tab.h'。誤解了教程。 – juanchopanza

+0

哈哈不介意我以前的評論,我真的很困惑.. –

相關問題