类名不命名类型

时间:2013-07-27 14:10:50

标签: c++ qt

我有两个classess 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

1 个答案:

答案 0 :(得分:5)

我假设 Ui :: Game 是你生成Qt的小部件类,而 Game 是你的实现类。 你的问题是循环包含依赖(在“Game.h”和“ApButton.h”之间),它通常使用前向声明来解决。实际上,您已经在“Game.h”中使用 Ui :: Game 类的机制了:

namespace Ui {
    class Game;
}

现在只需添加以下内容:

class ApButton;

并删除:

#include <apbutton.h>

除非你不打算在“Game.h”标题中使用 ApButton 的任何方法, btn 仍然是指针成员(为什么双指针在这里?),你对不完整的类型没问题。

也是你的朋友声明

friend class ApButton;

属于 Game 类。