c++ - 无法分配抽象类型 'Parser'的对象

标签 c++ compiler-errors abstract-class

我不知道如何解决此错误。我已经定义了有问题的函数,但是编译器说我还没有。请帮忙。

这是代码:

class Parser{
public:
  virtual void parse(stringstream& ss) = 0;
};

class Main_Parser : public Parser{
public:
  Main_Parser(){
    cout << "new";
  }

  void parse(stringstream& ss){
    string s;
    ss >> s;
    cout << s;
  }
};

int main () {
  string s = "apple orange oracle";
  stringstream ss(s);
  Parser temp = Main_Parser();
  temp.parse(ss);
}

编辑:如果这是关于拼接,我不知道它如何丢失有关方法parse()的信息。因为我已经在Parse类中定义了它。

最佳答案

问题在于Parser类确实没有parser函数的实现。似乎是-一个纯虚函数。通过键入Parser* temp = new Main_Parser(),您实际上使编译器可以用他的隐喻眼神来寻找其派生连接类中的实现。

执行此操作的另一种方法是向该指针发送现有派生类的引用,如本例所示:

int main () {
    string s = "apple orange oracle";
    stringstream ss(s);
    Main_Parser mp;
    Parser *temp = &mp;
    //or Parser *temp1 = static_cast<Parser*>(&mp);
    temp->parse(ss);
    return 0;
}

这样,您不必担心内存泄漏问题。

解决问题的最简单方法是:
int main () {
    string s = "apple orange oracle";
    stringstream ss(s);
    Main_Parser mp;
    Parser &temp = mp; // Be smart and let the beginners an easy way to use your code
    temp.parse(ss);
    return 0;
}

关于c++ - 无法分配抽象类型 'Parser'的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51426922/

相关文章:

c++ - 如何将一个整数除以另一个大于零的数并给出余数

c++ - next_permutation() 的并行代码

c++ - 错误: no matching function for call to 'function namel'

c++ - 警告 C4018 : '>' : signed/unsigned mismatch

android - 多个 dex 文件错误

Java 抽象类和类型

java - java中接口(interface)的实际用途是什么?

c++ - std::fmod 糟糕的 double

c++ - iOS:将 Qt 添加到现有的 Xcode 项目

java - 未经检查的强制转换抽象基类