我是靠谱客的博主 还单身往事,最近开发中收集的这篇文章主要介绍Qt 编译错误:C2280:尝试引用已删除的函数一、产生原因二、解决方案,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、产生原因

操作:继承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:尝试引用已删除的函数一、产生原因二、解决方案所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部