从基创建派生类
Creating a derived class from a base
我收到以下错误消息:
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);
}
有人可以解释这里出了什么问题,更重要的是为什么?
DerivedClass message = response.serialize(QString("someStuff"));
这是复制初始化,而不是赋值,operator=
甚至没有发挥作用。
你要么需要一个接受BaseClass
的构造函数,要么像这样编写它:
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();
...
};
相关文章:
- 使用基类指针创建对象时,缺少派生类析构函数
- 如何使用"derived input class"创建派生类?
- C ++如何在原始抽象类中创建一个函数,该函数接受派生类的输入
- 创建派生自可变参数模板包的类型元组
- 在没有默认构造函数的情况下创建的派生对象
- 如何创建派生对象的向量?
- 与简单地创建派生类指针相比,将基类绑定到派生类有什么优点?
- 创建基类指针的向量并将派生类对象传递给它(多态性)
- 在基类中创建派生类的对象
- 根据参数创建派生类的新实例
- 在从仅移动类型派生的类中定义析构函数在使用 std::vector emplace_back或push_back创建时会
- 创建指针是否超过非数组指针的末尾,而不是从 C++17 中的一元运算符和未定义的行为派生?
- 受保护的析构函数禁用在堆栈上创建派生类的对象?
- 如何从一组派生类创建列表?
- 是否有可能有一个派生类继承最终函数但创建相同的函数(而不是重写)
- 如何创建指向派生类的新指针,该派生类在C++编译时未知
- 如何在C 中创建Logic_error的自定义派生类
- 将使用基类 Ctor创建的对象转换为派生类
- GStreatermm:通过从Gst::element派生创建一个新的元素类型(在插件中)
- 基类的shared_pointer不能使用多态派生创建