在使用Qt的時候遇到這個錯誤,查了一下發現,是因為我沒有正確的使用前置聲明。
1 #ifndef FIRSTPAGE_H 2 #define FIRSTPAGE_H 3 4 #include "ui_dialog.h" 5 //#include <QWizardPage> 6 class QWizardPage; 7 8 class FirstPage : public Ui::Dialog, public QWizardPage 9 { 10 public: 11 FirstPage(); 12 }; 13 14 #endif // FIRSTPAGE_H
引用了這位的博客 c++ forward declaration 上的說明,如下:
可以聲明一個類而不定義它
class Screen;//declaration of the Screen class
這個聲明,有時候被稱為前向聲明(forward declaration),在程序中引入了類類型的Screen.在聲明之后,定義之前,類Screen是一個不完全類型(incompete type),即已知Screen是一個類型,但不知道包含哪些成員.
不完全類型只能以有限方式使用,不能定義該類型的對象,不完全類型只能用於定義指向該類型的指針及引用,或者用於聲明(而不是定義)使用該類型作為形參類型或返回類型的函數.
也就是說我們使用前置聲明是因為不想引入該類的頭文件,但是前置聲明是有限制的,也就是,只能用來定義前置聲明類的指針或者引用。這里我繼承了該類,而繼承是需要了解類的內部結構的,所以造成了這個錯我。