同じ名前の2つの関数があり、2レベルの継承で異なるシグネチャを持つベースクラスがあります。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
}
私は(1)
で正しい定義を見つけるために私のコンパイラ(GCC-4.3.2を)期待しているだろうが、私は他の手の作品で
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完全な例とよく書かれたポストのための –