Qt - 从基类继承一个类
Posted
技术标签:
【中文标题】Qt - 从基类继承一个类【英文标题】:Qt - Inheriting a Class from a Base Class 【发布时间】:2015-11-16 04:08:34 【问题描述】:我正在使用 Qt 制作一个贪吃蛇游戏,到目前为止,我还没有一次成功地从我的另一个类继承我的一个类。我可以让我的类继承自 Qt 类,例如 QObject
或 QGraphicsRectItem
,但不能从我自己的类继承。
这里是这个问题的一个例子,以及它的错误信息:
#ifndef SNAKE_H
#define SNAKE_H
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QWidget>
#include <QGraphicsRectItem>
#include <QObject>
#include <QTimer>
#include <QKeyEvent>
class Head;
class Food;
class Base; //Error 1
class Snake: public QGraphicsView, public Base //Error 2
Q_OBJECT
protected:
const static int width = 820;
const static int height = 500;
public:
Snake();
QGraphicsScene * scene;
QGraphicsView * view;
QGraphicsRectItem * border;
QGraphicsRectItem * border2;
;
#endif // SNAKE_H
////// Errors /////////
/*
Error 1:
forward declaration of 'class Base'
class Base;
^
Error 2:
invalid use of incomplete type 'class Base'
class Snake: public QGraphicsView, public Base
^
*/
那么我到底做错了什么?为什么它不能正确继承,为什么不能让我前向声明class Base
?
谢谢!
【问题讨论】:
你需要完整的类定义才能继承它。 @Niel Kirk - 你这是什么意思? 我叫尼尔·柯克。我的意思是,无论您是否拥有class Base stuff ;
,都需要在从它继承之前将其提供给编译器。
【参考方案1】:
您需要包含包含Base
类(即#include "Base.h"
)的头文件,而不是class Base
【讨论】:
【参考方案2】:invalid use of incomplete type 'class Base' class Snake: public QGraphicsView, public Base
编译器错误可能通常是晦涩难懂的,但这个不是。您不能使用前向声明的类,除非有指向它的指针。这也包括继承它。您需要事先拥有要继承的类,方法是在源代码中或包含它。
【讨论】:
以上是关于Qt - 从基类继承一个类的主要内容,如果未能解决你的问题,请参考以下文章