概述
一、产生原因
操作:继承QObject且使用Q_DECLARE_METATYPE宏。不使用Q_DECLARE_METATYPE宏是可以编译通过的。示例代码如下:
编译器错误 C2280:编译器错误 C2280 | Microsoft Docs
编译器检测到引用 deleted 函数的尝试。 此错误的原因可能是调用了在源代码中显式标记为 = deleted 的成员函数。 此错误还可能由编译器调用自动声明并标记为 deleted 的结构或类的隐式特殊成员函数引起。
class QReadImageResult: public QObject
{
Q_OBJECT
Q_PROPERTY(QImage image READ getImage WRITE setImage)
public:
QReadImageResult();
Q_INVOKABLE QImage getImage() const;
Q_INVOKABLE void setImage(const QImage &img);
private:
QImage m_image;
};
Q_DECLARE_METATYPE(QReadImageResult)
编译将会出现以下错误
D:QtQt5.10.15.10.1msvc2015_64includeQtCoreqmetatype.h:766: error: C2280: “QReadImageResult::QReadImageResult(const QReadImageResult &)”: 尝试引用已删除的函数
D:QtQt5.10.15.10.1msvc2015_64includeQtCoreqmetatype.h:1733: 参见对正在编译的函数 模板 实例化“int qRegisterNormalizedMetaType<T>(const QByteArray &,T *,QtPrivate::MetaTypeDefinedHelper<T,true>::DefinedType)”的引用 with [ T=QReadImageResult ]
二、解决方案
自定义一个拷贝构造函数QReadImageResult(const QReadImageResult &other)
#include <QImage>
class QReadImageResult: public QObject
{
Q_OBJECT
Q_PROPERTY(QImage image READ getImage WRITE setImage)
public:
QReadImageResult();
QReadImageResult(const QReadImageResult &other);
Q_INVOKABLE QImage getImage() const;
Q_INVOKABLE void setImage(const QImage &img);
private:
QImage m_image;
};
Q_DECLARE_METATYPE(QReadImageResult)
#include "QReadImageResult.h"
QReadImageResult::QReadImageResult()
{
}
QReadImageResult::QReadImageResult(const QReadImageResult &other)
: m_image(other.m_image)
{
}
QImage QReadImageResult::getImage() const
{
return m_image;
}
void QReadImageResult::setImage(const QImage &img)
{
m_image = img;
}
最后
以上就是还单身往事为你收集整理的Qt 编译错误:C2280:尝试引用已删除的函数一、产生原因二、解决方案的全部内容,希望文章能够帮你解决Qt 编译错误:C2280:尝试引用已删除的函数一、产生原因二、解决方案所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复