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
4

1 回答 1

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类。

于 2013-07-27T21:28:25.400 回答