我正在使用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 :(得分: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();