我有两个classess Game
和ApButton
,我希望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 :(得分: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 类。