簡體   English   中英

從基礎創建派生類

[英]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實施或刪除):

  1. 析構函數

  2. 復制構造函數

  3. 移動構造函數(適用於C ++ 11)

  4. 賦值運算符

例如,假設您不想實現分配。 你應該有:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM