gpt4 book ai didi

c++ - Qt - 没有匹配函数来调用 ‘QVariant::QVariant(MyClass&)’

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:59:21 27 4
gpt4 key购买 nike

我在创建具有自定义类型的 QVariant 时遇到问题。这是一个小例子,展示了我想要实现的目标:

主要.cpp:

#include "MyClass.h"

int main() {
MyClass some_object;
QVariant variant(some_object);
return 0;
}

包含/MyClass.h:

#pragma once

#include <QtCore>

class MyClass {
public:
MyClass() : _my_member(0.0) {}

MyClass(const MyClass &other) { _my_member = other._my_member; }

~MyClass() {}

MyClass& operator=(MyClass& other)
{
swap(*this, other);
return *this;
}

MyClass(MyClass&& other) : MyClass()
{
swap(*this, other);
}

friend void swap(MyClass& first, MyClass& second)
{
using std::swap;
swap(first._my_member, second._my_member);
}

private:
float _my_member;
};
Q_DECLARE_METATYPE(MyClass);

构建失败并出现以下错误:

error: no matching function for call to ‘QVariant::QVariant(MyClass&)’
QVariant variant(some_object);
^

我该如何解决这个错误?

最佳答案

您正在使用 MyClass 的实例调用 QVariant 的构造函数:QVariant 中没有这样的构造函数.您要找的是 QVariant::fromValue :

#include "MyClass.h"

int main() {
MyClass some_object;
QVariant variant = QVariant::fromValue(some_object);
return 0;
}

或者,您可以使用 QVariant::setValue :

#include "MyClass.h"

int main() {
MyClass some_object;
QVariant variant;
variant.setValue(some_object);
return 0;
}

注意:

要从 QVariant 中检索值,您必须使用模板方法 QVariant::value , 可选 QVariant::canConvert :

if (variant.canConvert<MyClass>())
MyClass retrieve_object = variant.value<MyClass>();

注2:

看起来你试图实现 copy-and-swap idiom .您的 operator= 应该是:

MyClass& operator=(MyClass other)
{
swap(*this, other);
return *this;
}

代替:

MyClass& operator=(MyClass& other)
{
swap(*this, other);
return *this;
}

如果您使用引用执行交换,other 将被修改,我怀疑您是否想要它。

关于c++ - Qt - 没有匹配函数来调用 ‘QVariant::QVariant(MyClass&)’,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39526165/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com