【发布时间】:2011-06-12 03:04:39
【问题描述】:
我有一个基类,它具有两个同名但在 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) 正常工作?
【问题讨论】:
-
+1 写好文章并附上完整示例
标签: c++ inheritance