以下のコードに関するコンパイラ エラーについて混乱しています。
class Base {
public:
virtual ~Base () { }
virtual void func () { }
virtual void func (int) { }
virtual void another () { }
virtual void another (int) { }
};
class Derived : public Base {
public:
void func () { }
};
int main () {
Derived d;
d.func();
d.func(0);
d.another();
d.another(0);
}
gcc 4.6.3 を使用すると、上記のコードは d.func(0) で、Dervied::func(int) が未定義であるというエラーを引き起こします。
func(int) の定義も Derived に追加すると、機能します。Derived で func() も func(int) も定義していない場合にも機能します (「別の」場合のように)。
明らかに、仮想オーバーロードされた関数に関していくつかの規則がここで行われていますが、これに遭遇したのはこれが初めてで、よくわかりません。誰かがここで何が起こっているのか正確に教えてもらえますか?