Qt-从基类继承类

Qt - Inheriting a Class from a Base Class

本文关键字:继承 基类 Qt-      更新时间:2023-10-16

我正在用Qt制作一个蛇游戏,到目前为止,我还没有成功地从我的另一个类继承我的一个类。我可以让我的类从像QObjectQGraphicsRectItem这样的Qt类继承,但不能从我自己的类继承。

下面是这个问题的一个例子,以及它的错误消息:

#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进行前瞻性声明?

谢谢!

您需要包含包含Base类(即#include "Base.h")的头文件,而不是class Base

invalid use of incomplete type 'class Base' class Snake: public QGraphicsView, public Base

编译器错误通常可能是模糊的,但这次不是。除非有指向它的指针,否则不能使用正向声明的类。这也包括继承它。您需要预先将要继承的类包含在源中或包含在其中。