Qt 编译错误:C2280:尝试引用已删除的函数
Qt compile error: C2280: attempting to reference a deleted function
>我有一个相对简单的类,其中包含一个布局,其中包含一些小部件(标签,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
类的副本,这将强烈表明情况确实如此。
相关文章:
- 为什么我的双向链表删除函数会删除多个节点?
- unique_ptr实现接口时对已删除函数的引用
- 可视代码 删除函数括号内的空格
- 从尝试引用已删除函数的矢量 C++ 中删除对象
- 试图引用已删除函数数组的相等运算符
- 双链表堆栈删除函数不起作用
- 是否需要删除函数中未使用的新结构?
- C++引用已删除函数错误
- 删除函数环境中C++输入 R 对象
- 删除函数中的对象C++
- 在 C++ 中使用删除函数的不同方式
- C++错误:C2280 - 引用已删除函数的编译器错误?
- C++,删除函数/迭代进程中定义的动态数组
- 删除函数 c++ 的读取访问冲突异常
- 如何对此自定义C 列表类实现删除函数
- 双向链表问题(特别是复制构造函数和删除函数)
- 引用 std::atomic <bool>的已删除函数错误
- 在删除函数自由度的指针后,为什么我会得到核心转储
- C++删除函数
- 返回 C++11 中已删除函数的类型