编译器没有找到基类的方法
问题描述:
我在派生类中的虚拟方法有问题。这里是我的(简化的)C++类。编译器没有找到基类的方法
class Base
virtual method accept(MyVisitor1* v) { /*implementation is here*/ };
virtual method accept(MyVisitor2* v) { /*implementation is here*/ };
virtual method accept(MyVisitor3* v) { /*implementation is here*/ };
class DerivedClass
virtual method accept(MyVisitor2* v) { /*implementation is here*/ };
下使用造成VS 2005给: “错误C2664: 'DerivedClass ::接受':无法从 'Visitor1 *' 转换参数1 'Visitor2 *'”。
DerivedClass c;
MyVisitor1 v1;
c.accept(v1);
我在期待编译器为我的DerivedClass找到并调用Base :: accept(MyVisitor1)。显然这不起作用,但我不明白为什么。有任何想法吗?
感谢,
保罗
答
的DerivedClass
的accept
成员隐藏具有相同名称的基类中的任何成员,即使他们有不同的签名。要包含它们,添加以下的DerivedClass
定义:
using Base::accept;
(我假设DerivedClass
并从Base
派生,你的代码片段并没有明确说)。
+0
这有效。我不知道关键字使用的这种用法。谢谢。 – Paul 2010-06-17 11:22:56
派生类是否真的从基类派生?它是公有继承吗? Base类中的方法是否也公开? – Patrick 2010-06-17 10:26:20
你应该提供一些实际编译的代码。它看起来像DerivedClass实际上并不是从Base派生的,但由于提供的代码不是C++,所以我们无法确定。 – 2010-06-17 10:26:31
请发表实际的代码。你确定你使用了公有继承吗? – 2010-06-17 10:26:50