无法分配抽象类型为“解析器”的对象

时间:2018-07-19 15:45:53

标签: 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类中定义了它。

1 个答案:

答案 0 :(得分:0)

问题在于类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;
}