使用派生类中声明的方法
using a method declared in derived class
我正在用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*
。
我认为parse
和Parse
的大写不匹配。看看修复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();
相关文章:
- 声明高维向量的更简洁的方法
- 模板方法访问正向声明的类仅在没有此指针的情况下无法编译
- 将子类方法声明为基类的友元
- 如何在声明为 const 的方法中更改类成员
- 编译器无法识别在类声明之外定义的方法
- 在类中声明 Array 成员的正确方法
- 如何在该接收类之外声明嵌套类的方法
- 转发声明在命名空间中不起作用的替代方法
- 在实现文件中使用模板参数声明方法
- 为什么在主方法之前声明方法会产生错误 c++
- 在 cpp 正文中声明方法时未定义的符号
- 声明方法时没有名称空间,也没有对C 作用的方法的对象
- 无法在类中声明方法 (C++_
- 可变声明方法
- 为什么这种前向声明方法会产生错误
- 在c++中可以通过模板声明方法吗?
- 在c++中声明方法时= 0的含义是什么?
- 为什么我需要为部分模板专门化重新声明方法/成员?
- 两种数组声明方法的区别
- 强制编译器声明方法是否已被实现- c++