2013-11-28 43 views
1

我正在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课堂上宣布它!
我应该如何解决这个问题?

+0

Add virtual void parese()= 0;并且你有一个抽象基类,它不能被实例化。 –

+0

该代码看起来是正确的,但错误消息意味着你试图调用'parse'而不是'Parse' - C++区分大小写。你确定你已经发布了*确切的*代码和错误信息吗? –

回答

1

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

尽管在知道p实际上指向LicenseParser,你分配给一个基类指针意味着你选择不让编译器知道这件事。

您应该在基类中具有虚拟的Parse成员函数,或者让变量p代替LicenseParser*

1

我认为您的大小写在parseParse之间不匹配。看看C++是否区分大小写有助于修复。 (注:看起来你的编辑修正了我原来的答复后

而且,因为p被声明为Parser*,编译器将标志一个错误,因为Parse没有在Parser类中定义。在Parser(例如virtual void Parse() = 0;)中声明一个纯virtual函数Parse并且它应该被编译(假设Parse在.cpp文件中被定义为LicenseParser)。

你也可以声明pLicenseParser*,因此并不需要声明virtual功能ParseParser

这是否帮助?

0

"'class Parser' has no member named 'parse"

如果这是你所得到的,我认为你应该改变大小写。在拳头文件声明

void Parse(); 

而另一方面你要求

p->parse(); 
相关问题