我收到以下错误消息:
conversion from ‘BaseClass’ to non-scalar type ‘DerivedClass’ requested
编译类似:
AnotherClass response;
DerivedClass message = response.serialize(QString("someStuff"));
我在哪里
BaseClass AnotherClass::serialize( const QString& valueName ) const
和
class DerivedClass : public BaseClass
{
...
DerivedClass &operator=(const BaseClass &other);
}
有人可以解释这里有什么问题,更重要的是为什么?
答案 0 :(得分:3)
DerivedClass message = response.serialize(QString("someStuff"));
这是复制初始化,而非作业,operator=
甚至没有发挥作用。
您需要一个采用BaseClass
的构造函数或者像这样编写它:
AnotherClass response;
DerivedClass message;
message = response.serialize(QString("someStuff")); // assignment
答案 1 :(得分:0)
除了使用复制初始化,而不是您认为的任务,您也违反了rule of three/four。
规则是,如果你有以下任何,你必须拥有所有(使用Q_DECL_EQ_DELETE实现或删除):
析构
复制构造函数
移动构造函数(适用于C ++ 11)
作业运营商
例如,假设您不想实现赋值。你应该:
class MyClass {
// private, deleted - compatible with both C++11 and C++98/03.
MyClass & operator=(const MyClass &) Q_DECL_EQ_DELETE;
public:
MyClass(const MyClass &);
MyClass(MyClass &&);
virtual ~MyClass();
...
};