gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:58:42 24 4
gpt4 key购买 nike

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

这是代码:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com