Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从基类创建派生类_C++_Qt - Fatal编程技术网

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.