使用派生类中声明的方法

using a method declared in derived class

本文关键字:声明 方法 派生      更新时间:2023-10-16

我正在用C++开发带有Cascades的BlackBerry 10应用程序。我只是一个初学者,这个问题真的让我很困惑。我有一个类Parser和一个派生类LicenseParser

Class Parser {
    // implementation
}

Class LicenseParser : public Parser {
    // ...
    public:
    void Parse();
}

在另一个文件中:

Parser* p= new LicenseParser();
p->Parse();

但我有一个错误:

class Parser' has no member named 'parse'

方法Parse是在派生类中声明的,所以我知道可以在不在Parser类中声明它的情况下使用它
我该如何更正?

发生此错误的原因是p是指向Parser的指针,而不是指向LicenseParser的指针。

尽管知道p实际上指向LicenseParser,但你对基类指针的赋值意味着你选择不让编译器知道任何关于它的信息。

您应该在基类中有一个虚拟的Parse成员函数,或者将变量p改为LicenseParser*

我认为parseParse的大写不匹配。看看修复C++是否区分大小写。(注意:看起来你的编辑在我最初的回答后修复了这个问题

此外,由于p被声明为Parser*,编译器将标记错误,因为Parse没有在Parser类中定义。在Parser中声明一个纯virtual函数Parse(例如virtual void Parse() = 0;),它应该进行编译(假设Parse是在LicenseParser的.cpp文件中定义的)。

您也可以将p声明为LicenseParser*,因此不需要在Parser 中声明virtual函数Parse

这有帮助吗?

"'classParser'没有名为'parse'的成员"

如果这就是你得到的,我认为你应该改变大写。在第一个文件中,您声明

void Parse();

而另一方面你要求

p->parse();