Qt—未解析的重载函数类型

Qt - unresolved overload function type

本文关键字:重载 函数 类型 Qt      更新时间:2023-10-16

我在Qt Creator中构建应用程序时遇到以下错误:

错误(第3行):没有用于调用"QGraphicsScene::QGraphicsSene()"的匹配函数

其来源很简单(文件名为gamscene.cpp):

#include "gamescene.h"
GameScene::GameScene() : QGraphicsScene(parent)
{
}

我在谷歌上搜索过,也看到过一些类似的问题,但我真的不明白给出的答案。

我们从QGraphicsScene类派生了类似的类

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

请注意,父级是传递给构造函数的参数。构造函数的实现看起来像:

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

parent必须来自某个地方。由于您正在定义GameScene构造函数,因此它可能实际上是构造函数的一个参数(我不熟悉Qt,所以我不知道parent应该是什么类型——在实际代码中使用适当的类型):

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

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

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

可能是有可能的。可能不会,因为错误消息指示QGraphicsScene不存在零参数构造函数。

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