我在派生类中遇到了虚拟方法的问题。这是我的(简化)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 :: accept':无法将参数1从'Visitor1 *'转换为'Visitor2 *'”。
DerivedClass c;
MyVisitor1 v1;
c.accept(v1);
我期待编译器为我的DerivedClass找到并调用Base :: accept(MyVisitor1)。显然这不起作用,但我不明白为什么。有什么想法吗?
谢谢,
保
答案 0 :(得分:4)
accept
DerivedClass
成员隐藏了基类的任何成员,即使他们有不同的签名。要包含它们,请将以下内容添加到DerivedClass
:
using Base::accept;
(我假设DerivedClass
派生自Base
;您的代码段没有明确说明。)