编译器没有找到基类的方法

问题描述:

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

感谢,

保罗

+3

派生类是否真的从基类派生?它是公有继承吗? Base类中的方法是否也公开? – Patrick 2010-06-17 10:26:20

+0

你应该提供一些实际编译的代码。它看起来像DerivedClass实际上并不是从Base派生的,但由于提供的代码不是C++,所以我们无法确定。 – 2010-06-17 10:26:31

+0

请发表实际的代码。你确定你使用了公有继承吗? – 2010-06-17 10:26:50

DerivedClassaccept成员隐藏具有相同名称的基类中的任何成员,即使他们有不同的签名。要包含它们,添加以下的DerivedClass定义:

using Base::accept; 

(我假设DerivedClass并从Base派生,你的代码片段并没有明确说)。

+0

这有效。我不知道关键字使用的这种用法。谢谢。 – Paul 2010-06-17 11:22:56