Qt - 未解决的重载函数类型

时间:2011-06-01 19:56:01

标签: c++ qt

尝试在Qt Creator中构建我的应用时出现以下错误:

错误(第3行):没有匹配函数来调用'QGraphicsScene :: QGraphicsScene()'

这个的来源很简单(文件名是gamscene.cpp):

#include "gamescene.h"

GameScene::GameScene() : QGraphicsScene(parent)
{

}

我已经搜索了一些相似的问题,但我并不理解给出的答案。

2 个答案:

答案 0 :(得分:2)

我们来自QGraphicsScene类,如此

class ImprintTemplateScene : public QGraphicsScene
{
    Q_OBJECT
public:            
    ImprintTemplateScene(QObject *parent = 0);

...
};

请注意,parent是传递给构造函数的参数。构造函数实现如下:

ImprintTemplateScene::ImprintTemplateScene(QObject *parent)
    :   QGraphicsScene(parent),
        sceneMode(mode_normal),
        editingTextBox(0)
{   
}

答案 1 :(得分:0)

第3行的{p> parent必须来自某个地方。因为你正在定义一个GameScene构造函数,大概它实际上是构造函数的一个参数(我不熟悉Qt所以我不知道parent应该是什么类型 - 使用适当的类型你的实际代码):

GameScene::GameScene(TypeOfParent parent) : QGraphicsScene(parent)
{
}

或者,如果在没有父项的情况下调用QGraphicsScene构造函数是有意义的,那么:

GameScene::GameScene() : QGraphicsScene()
{
}

可能是一种可能性。可能不是,因为错误消息表明没有QGraphicsScene的零参数构造函数。

此外,您没有发布类定义,但考虑到构造函数定义尝试,我假设GameScene公开继承自QtGraphicsScene。因此,当您构建GameScene时,您需要调用超类构造函数(正如您尝试的那样)。但是超类构造函数的任何参数都只能来自构造函数的参数。因此,如果超类构造函数需要一个参数,那么构造函数将需要该参数,以便它可以将它传递给超类构造函数(除非您将超类构造函数传递给编译时常量参数)。