c++ - 因为以下虚函数在一个类中是纯的

标签 c++ abstract

我正在尝试编译以下代码。起初一切都很好。我做了一些修改,然后出现以下错误。我真的真的不明白发生了什么:

main.cpp: In function 'int main()':
main.cpp:38:32: error: cannot declare variable 'mp' to be of abstract type 'MasterPricerContentManager'
     MasterPricerContentManager mp(&query);
                                ^
main.cpp:20:7: note:   because the following virtual functions are pure within 'MasterPricerContentManager':
 class MasterPricerContentManager: public ContentManager {
       ^
main.cpp:17:24: note:   virtual std::string* ContentManager::getAnswer()
   virtual std::string *getAnswer()   = 0;

据我了解,如果一个函数是纯虚函数,我必须在派生类中实现它。为什么我会遇到这个问题?


/******************************************************************************

                              Online C++ Compiler.
               Code, Compile, Run and Debug C++ program online.
Write your code in this editor and press "Run" button to compile and execute it.

*******************************************************************************/

#include <iostream>

using namespace std;

class ContentManager {
 public:
  virtual bool execute()= 0;
  virtual void setQuery(std::string *query) = 0;
  virtual std::string *getAnswer()   = 0;
};

class MasterPricerContentManager: public ContentManager {
 public:
   explicit MasterPricerContentManager(std::string *query):_query(query) {}
    ~MasterPricerContentManager() {}
    MasterPricerContentManager(const MasterPricerContentManager &)= delete;

    bool execute() {return true;}
    void setQuery(std::string  *query) {_query = query; }
    std::string       *getAnswer() const { return {}; }

  private:
    std::string * _query;

};

int main()
{  
    std::string query = "hello";
    MasterPricerContentManager mp(&query);

    return 0;
}

最佳答案

why i am getting that problem?

因为你的基类中的签名与你的子类中的不同:

 virtual std::string *getAnswer()   = 0;

对比

 std::string       *getAnswer() const { return {}; }

您需要将 const 修饰符添加到基类中的声明中,或者将其从子类中的覆盖中移除。

关于c++ - 因为以下虚函数在一个类中是纯的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51729592/

相关文章:

java - 多态和抽象父类

c++ - 抽象类和唯一指针 C++ 错误?

c++ - 可以运行 Qt GUI 应用程序的最小 linux

c++ - 从 MPL 元函数类创建仿函数

c++ - 如何从 C++ 中的三个不同的 txt 文件中获取输入?

java - 如何在抽象方法中给出不同的参数?

java - 为抽象类创建对象

c++ - 改进模板类中的编译时错误消息

c++ - 对双向链表进行操作时要注意什么?

抽象基类的 Django 模型字段