c – 如果baseclass具有两个相同名称的函数,则无法找到基类函数

前端之家收集整理的这篇文章主要介绍了c – 如果baseclass具有两个相同名称的函数,则无法找到基类函数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个基类,它有两个同名的函数,但在2级继承中有不同的签名.
struct A {
    virtual void f(int) { }
    virtual void f(int,int) { };
    virtual void f1(int) { }
};

struct B: public A { };

struct C: public B {
  void f(int,int) { }
  void f1(int) { }
};

int main() {
 C obj;
 obj.f1(0);
 obj.f(0,0);

 obj.f(0);    // (1) cannot be found
 obj.B::f(0); // (2) works

}

我希望我的编译器(gcc-4.3.2)能够在(1)找到正确的定义,但是我得到了

g++     main.cpp   -o main
main.cpp: In function 'int main()':
main.cpp:20: error: no matching function for call to 'C::f(int)'
main.cpp:10: note: candidates are: virtual void C::f(int,int)
distcc[2200] ERROR: compile main.cpp on localhost Failed
make: *** [main] Error 1

(2)另一方面工作.

我需要做些什么来使(1)一般工作?

解决方法

在C的定义中使用A :: f写入

你是名字隐藏的受害者! void C :: f(int,int)隐藏void A :: f(int),只是因为.

猜你在找的C&C++相关文章