编译器没有从基类中找到方法

时间:2010-06-17 10:23:18

标签: c++ visual-studio oop

我在派生类中遇到了虚拟方法的问题。这是我的(简化)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)。显然这不起作用,但我不明白为什么。有什么想法吗?

谢谢,

1 个答案:

答案 0 :(得分:4)

accept DerivedClass成员隐藏了基类的任何成员,即使他们有不同的签名。要包含它们,请将以下内容添加到DerivedClass

的定义中
using Base::accept;

(我假设DerivedClass派生自Base;您的代码段没有明确说明。)