[英]Creating a vector with 6 pointers(3 from base class and 3 from derived class)
[英]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
除了使用復制初始化(而不是您認為的賦值)外,您還違反了3/4 規則 。
規則是,如果您具有以下任意一項,則必須全部具備(使用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();
...
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.