Qt 编译错误:C2280:尝试引用已删除的函数

Qt compile error: C2280: attempting to reference a deleted function

本文关键字:删除 函数 引用 编译 错误 C2280 Qt      更新时间:2023-10-16

>我有一个相对简单的类,其中包含一个布局,其中包含一些小部件(标签,lineEdits,pushButtons),这些小部件显示为卡片。在我尝试添加信号和插槽之前,一切都很好。下面的头文件编译得很好,注释掉了部分,如图所示。

#include <QString>
#include <QObject>
#include <QWidget>
class KMLFile //: public QObject
{
    //Q_OBJECT
public:
    KMLFile();
    ~KMLFile();
    QString m_originalFilename;
    QString m_originalPath;
    QString m_proposedFilename;
    QString m_propsoedPath;
    QString m_coords;
    QWidget* trackWidget;
    void populate(QString originalFilename, QString originalPath, QString proposedFilename, QString coords);
    QString getCoords();
    int getLength();
//public slots:
    //void changeFilename();
};

当这些代码位被保留时,我收到以下错误:

"C:...\qlist.h:425: 错误: C2280: 'KMLFile::KMLFile(const KMLFile &)': 尝试引用已删除的函数

我正在使用Qt5.3和Qt Creator。我尝试清理,运行qmake并删除构建文件夹无济于事。我被难住了!

感谢您对如何解决此问题的任何见解,以便我可以进步。

QObject 的复制构造函数是私有的 - 或删除的。

在代码中的其他地方,您可以使用 KMLFile 的复制构造函数,然后调用 QObject 的复制构造函数。

你可以重新实现KMLFile的复制构造函数,但最好的解决方案是根本不使用它。

QList中,应存储指向KMLFile对象的指针,而不是对象本身,前提是它们的生存时间比列表本身长。或者您可以开始使用 QSharedPointer .

QObject 有一个已删除的复制构造函数。您的类正在创建编译器生成的复制构造函数。当您QObject类的基时,编译器会生成复制构造函数,KLMFile尝试调用基类的已删除复制构造函数,这时会出现错误。

如果需要,将自动生成

KLMFile的复制构造函数(即,如果您尝试复制类的实例),除非您显式指定自己的复制构造函数。

如果错误中引用的行靠近 KLMFile 类的副本,这将强烈表明情况确实如此。