我对以下代码的编译器错误感到困惑:
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) 时,它也可以工作(如“另一个”的情况)。
显然这里有一些关于虚拟重载函数的规则,但这是我第一次遇到它,我不太明白。有人能告诉我这里到底发生了什么吗?