2013-07-27 51 views
3

我有兩個類新GameApButton,我想ApButton使用Game屬性,所以我想使這兩個朋友的功能,但我不斷收到錯誤:類名不名一類

`Game` does not name a type 

我知道我不應該在遊戲類中添加apbutton.h,但是我必須這樣做,因爲遊戲使用ApButton(從按鈕繼承的類),您是否有解決此問題的其他解決方案?

下面是兩個類的代碼:

#ifndef GAME_H 
#define GAME_H 

#include <QtGui> 
#include <QWidget> 
#include <apbutton.h> //I have to add this 
#include <QHBoxLayout> 
#include <QTimer> 
#include <iostream> 
#include <QMouseEvent> 

using namespace std; 

namespace Ui { 
    class Game; 
} 

friend class ApButton; 

class Game : public QWidget 
{ 
    Q_OBJECT 
public: 
    explicit Game(QWidget *parent = 0); 
    ~Game(); 
    QLabel *bomb_label(); 
private: 
    Ui::Game *ui; 
    ApButton **btn; //that's why I have to include apbutton.h 
}; 

#endif // GAME_H 


#ifndef APBUTTON_H 
#define APBUTTON_H 

#include <QPushButton> 
#include <iostream> 
#include <QMouseEvent> 
#include <game.h> 

using namespace std; 

class ApButton : public QPushButton 
{ 
    Q_OBJECT 
public: 
    explicit ApButton(QWidget *parent = 0); 
    void setRowCol(int _row,int _col); 
    void mousePressEvent(QMouseEvent *ev); 
private: 
    string name; 
    int row; 
    int col; 
    Game g; //here is the problem! 
}; 

#endif // APBUTTON_H 
+0

請讓你的代碼可讀。在將它粘貼到此處之前格式化*。粘貼後,選擇它並按下Ctrl + K。 –

+0

您在名稱空間中聲明該類,並試圖在全局範圍內定義它。爲此,您需要完全限定名稱:'class Ui :: Game {};' – jrok

+0

另外,您不需要在game.h中包含'apbutton.h'。 「friend」語句不需要類的定義。 –

回答

5

我認爲UI ::遊戲是你的Qt生成的掛件類,而遊戲是你的實施班。 你的問題是循環包含依賴(在「Game.h」和「ApButton.h」之間),它通常使用前向聲明來解決。事實上,你已經使用機制,爲UI ::遊戲類 「Game.h」:

namespace Ui { 
    class Game; 
} 

現在只需添加低於:

class ApButton; 

,並刪除:

#include <apbutton.h> 

除非你不打算使用的任何方法ApButton在「Game.h」頁眉和BTN仍然是一個指針成員(爲什麼雙指針在這裏?),你很好,與不完整的類型。

也是你的朋友聲明

friend class ApButton; 

所屬的遊戲類中。

-1

試試這個:

#ifndef GAME_H 
#define GAME_H 

#include <QtGui> 
#include <QWidget> 
// #include <apbutton.h> // No, you do not have to add this 
#include <QHBoxLayout> 
#include <QTimer> 
#include <iostream> 
#include <QMouseEvent> 

using namespace std; 
namespace Ui { 
    class ApButton; 

    class Game : public QWidget 
    { 
     Q_OBJECT 
     friend class ApButton; 
    public: 
     explicit Game(QWidget *parent = 0); 
     ~Game(); 

     QLabel *bomb_label(); 
    private: 
     Ui::Game *ui; 
    }; 
} 

#endif // GAME_H 


#ifndef APBUTTON_H 
#define APBUTTON_H 

#include <QPushButton> 
#include <iostream> 
#include <QMouseEvent> 
#include <game.h> 

using namespace std; 
namespace Ui 
{ 
    class ApButton : public QPushButton 
    { 
     Q_OBJECT 
    public: 
     explicit ApButton(QWidget *parent = 0); 
     void setRowCol(int _row,int _col); 
     void mousePressEvent(QMouseEvent *ev); 
    private: 
     string name; 
     int row; 
     int col; 
     Game g; //here is the problem! 
    }; 
} 

#endif // APBUTTON_H 
+0

我必須包含apbutton.h請再次閱讀我的代碼我編輯它... – Aminiok