Qt - 从基类继承一个类

Posted

技术标签:

【中文标题】Qt - 从基类继承一个类【英文标题】:Qt - Inheriting a Class from a Base Class 【发布时间】:2015-11-16 04:08:34 【问题描述】:

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

这里是这个问题的一个例子,以及它的错误信息:

#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 - 从基类继承一个类的主要内容,如果未能解决你的问题,请参考以下文章

错误:与 'operator=' 不匹配。试图从基类继承并从基类初始化?

C++中子类从基类都继承啥?

将成员添加到从基类继承的结构

从基类创建继承类

派生类不从基类继承重载方法

从基类 (DTO) 继承多个类是不是违反了任何 SOLID 原则?