4
我感到困惑關於下面的代碼編譯器錯誤:困惑虛擬重載函數
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)時,它也起作用(就像「另一個」的情況一樣)。
很明顯,有一些規則有關虛擬重載函數會在這裏,但是這是我第一次遇到它,我不太明白。有人能告訴我究竟發生了什麼嗎?
嘿感謝! !關於-Woverloaded的提示虛擬和修復功能非常有用;我甚至不知道我有過的問題的絕佳答案。 :-) – 2013-05-12 07:34:51