2016-05-28 26 views
0

我的代碼存在問題。編譯器不斷爲我創建的每個CButton指針顯示這個錯誤。[Qt]:'CButton'沒有指定類型

/home/trafel/ドキュメント/Projects/C++/CCalc/ccalc.h:23: error : 'CButton' does not name a type 
    CButton *button_0; 
    ^

CButton類從QPushButton擴展而來。 這裏是主標題代碼:

#ifndef CCALC_H 
#define CCALC_H 

#include <QWidget> 
#include <QMainWindow> 
#include <QPushButton> 
#include "clabel.h" 
#include "cbutton.h" 

class CCalc : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    CCalc(); 
    ~CCalc(); 

public slots: 
    void CPush(QString); 
    void CAction(QString); 

private: 
    CButton *button_0; 
    CButton *button_1; 
    CButton *button_2; 
    CButton *button_3; 
    CButton *button_4; 
    CButton *button_5; 
    CButton *button_6; 
    CButton *button_7; 
    CButton *button_8; 
    CButton *button_9; 
    CButton *button_equal; 
    CButton *button_plus; 
    CButton *button_minus; 
    CButton *button_multiply; 
    CButton *button_divide; 
    CButton *button_power; 
    CButton *button_root; 
    CButton *button_leftParenthesis; 
    CButton *button_rightParenthesis; 
    CButton *button_return; 
    CButton *button_ce; 

    CLabel *label_input; 
    CLabel *label_output; 

    QMenu *menu_session; 
     QAction *session_new; 
     QAction *session_open; 
     QAction *session_save; 
     QAction *session_quit; 
    QMenu *menu_log; 
     QAction *log_inspect; 
    QMenu *menu_help; 
     QAction *help_help; 
     QAction *help_about; 
}; 

#endif // CCALC_H 

這是從CButton的類頭:

#ifndef CBUTTON_H 
#define CBUTTON_H 

#include <QPushButton> 
#include "ccalc.h" 

class CButton : public QPushButton 
{ 
    Q_OBJECT 

public: 
    CButton(QWidget *parent); 
    ~CButton(); 
    QString getValue(); 
    void setValue(QString string); 

private: 
    QString value; 
}; 

#endif // CBUTTON_H 

難道我忘了補充一點?

+1

'ccalc.h'包含'cbutton.h',但'cbutton.h'包含'ccalc.h'。這不是一個好主意:http://stackoverflow.com/questions/14909997/why-arent-my-include-guards-preventing-recursive-inclusion-and-multiple-symbol。看起來你可以從'cbutton.h'中刪除'ccalc.h'。 –

回答

1

簡短的解決方案:

在文件"cbutton.h"替換:

#include "ccalc.h" 

有:

class CCalc; 

或刪除#include完全,因爲它似乎你不無論如何使用它。

說明:

通知你有循環依賴:在"ccalc.h"你需要知道一個CButton是什麼,以及在"cbutton.h"你需要知道一個CCalc是什麼。

這意味着,如果"cbutton.h"首先解析,您將在此爲了打擊這些線路(僅顯示相關行):

1. #define CBUTTON_H  <-- from file "cbutton.h" 
2. #include "ccalc.h"  <-- from file "cbutton.h" 
3. #include "cbutton.h" <-- from file "ccalc.h", but as CBUTTON_H is already defined, the content of this file is ignored. 
4. CButton *button_0;  <-- from file "ccalc.h", which indeed refers to an undefined class, as we have not reached the line "class CButton" yet. 

在這些情況下的解決方案是,如果你"ccalc.h"不需要知道"cubutton.h"中的方法,但僅僅知道該類是否存在,請替換爲包含類原型:class CButton;。同樣適用於#include "clabel.h"#include "clabel.h"