我正在和Qt一起进行蛇游戏,到目前为止,我还没有成功地从我的另一个班级继承我的一个班级。我可以让我的类继承Qt类,如NSTextStorage *textStorage = [[NSTextStorage alloc] initWithString:@"hello"];
NSLayoutManager *layoutManager = [[NSLayoutManager alloc] init];
NSTextContainer *textContainer = [[NSTextContainer alloc] init];
[layoutManager addTextContainer:textContainer];
[textStorage addLayoutManager:layoutManager];
//Figure out the bounding rectangle
NSRect stringRect = [layoutManager boundingRectForGlyphRange:NSMakeRange(0, [layoutManager numberOfGlyphs]) inTextContainer:textContainer];
或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
^
*/
的前瞻声明?
谢谢!
答案 0 :(得分:2)
而不是class Base
您需要包含包含Base
类的头文件(即#include "Base.h"
)
答案 1 :(得分:0)
invalid use of incomplete type 'class Base' class Snake: public QGraphicsView, public Base
编译器错误可能经常是模糊不清的,但事实并非如此。您不能使用前向声明的类,除非指向它。这包括继承它。您需要预先拥有您继承的类,方法是将其包含在源代码中或包含它。