使用派生类中声明的方法

时间:2013-11-28 15:25:14

标签: c++ inheritance blackberry-10

我正在使用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类中声明它的情况下使用!
我该怎么纠正这个?

3 个答案:

答案 0 :(得分:1)

我认为您的大小写在parse vs Parse上不匹配。看看修复是否有帮助,因为C ++区分大小写。 (注意:看起来你的编辑修复了我原来的答案后

此外,由于p被声明为Parser*,编译器将标记错误,因为Parse类中未定义Parser。在virtual中声明一个纯Parse函数Parser(例如virtual void Parse() = 0;)并且它应该编译(假设{。{1}}在.cpp文件中为{{1}定义}})。

您也可以将Parse声明为LicenseParser,因此无需在p

中声明LicenseParser*函数virtual

这有帮助吗?

答案 1 :(得分:1)

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

尽管知道p 实际指向LicenseParser,但你对基类指针的赋值意味着你选择了不要让编译器知道任何事情。

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

答案 2 :(得分:0)

  

“'class Parser'没有名为'parse'的成员

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

void Parse();

而另一方则请求

p->parse();