C++ 从基类创建派生类
我收到以下错误消息:C++ 从基类创建派生类,c++,qt,C++,Qt,我收到以下错误消息: conversion from ‘BaseClass’ to non-scalar type ‘DerivedClass’ requested 在编译类似以下内容时: AnotherClass response; DerivedClass message = response.serialize(QString("someStuff")); 我在哪里 BaseClass AnotherClass::serialize( const QString& valueN
conversion from ‘BaseClass’ to non-scalar type ‘DerivedClass’ requested
在编译类似以下内容时:
AnotherClass response;
DerivedClass message = response.serialize(QString("someStuff"));
我在哪里
BaseClass AnotherClass::serialize( const QString& valueName ) const
及
有人能解释一下这里出了什么问题吗?更重要的是,为什么
DerivedClass message = response.serialize(QString("someStuff"));
这是复制初始化,而不是赋值,而且操作符=
甚至不起作用
您要么需要一个接受基类的构造函数,要么这样编写:
AnotherClass response;
DerivedClass message;
message = response.serialize(QString("someStuff")); // assignment
这是复制初始化,而不是赋值,而且操作符=
甚至不起作用
您要么需要一个接受基类的构造函数,要么这样编写:
AnotherClass response;
DerivedClass message;
message = response.serialize(QString("someStuff")); // assignment
这是复制初始化,而不是赋值,而且操作符=
甚至不起作用
您要么需要一个接受基类的构造函数,要么这样编写:
AnotherClass response;
DerivedClass message;
message = response.serialize(QString("someStuff")); // assignment
这是复制初始化,而不是赋值,而且操作符=
甚至不起作用
您要么需要一个接受基类的构造函数,要么这样编写:
AnotherClass response;
DerivedClass message;
message = response.serialize(QString("someStuff")); // assignment
除了使用复制初始化,而不是您认为的赋值,您还违反了
规则是,如果您有以下任何一项,您必须拥有所有这些(使用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();
...
};
除了使用复制初始化,而不是您认为的赋值,您还违反了
规则是,如果您有以下任何一项,您必须拥有所有这些(使用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();
...
};
除了使用复制初始化,而不是您认为的赋值,您还违反了
规则是,如果您有以下任何一项,您必须拥有所有这些(使用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();
...
};
除了使用复制初始化,而不是您认为的赋值,您还违反了
规则是,如果您有以下任何一项,您必须拥有所有这些(使用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();
...
};
对,我刚刚意识到=运算符。这是一个拷贝初始化问题,而不是赋值问题+1好的,我刚刚意识到=运算符。这是一个拷贝初始化问题,而不是赋值问题+1好的,我刚刚意识到=运算符。这是一个拷贝初始化问题,而不是赋值问题+1好的,我刚刚意识到=运算符。这是一个拷贝初始化问题,而不是赋值问题+1.