1
請考慮下面的例子(link to ideone):重載決策
#include <iostream>
class Base1
{
public:
void doit(){}
};
class Base2
{
void doit(int x){}
};
class Derrived : public Base1, public Base2
{
};
using namespace std;
int main()
{
cout << "Hello World" << endl;
Derrived d;
d.doit(); // doesn't work - error: request for member ‘doit’ is ambiguous
d.::Base1::doit(); //works
return 0;
}
都和基礎1具有和Base2成員函數DOIT與不同的輸入參數,因此在理論上重載應自動解決。 但嘗試撥打 d.doit(); 失敗,錯誤
prog.cpp: In function ‘int main()’:
prog.cpp:36:6: error: request for member ‘doit’ is ambiguous
d.doit(); // doesn't work - error: request for member ‘doit’ is ambiguous
^
prog.cpp:18:7: note: candidates are: void Base2::doit(int)
void doit(int x)
^
prog.cpp:6:10: note: void Base1::doit()
void doit()
^
,我必須鍵入d :: ::基礎1度特();使其工作。
爲什麼編譯器無法解析哪個函數調用沒有我明確指定它?它預期的行爲?
http://stackoverflow.com/questions/5368862/why-do-multiple-inherited-functions-with-same-name-but-different-signatures-not?rq=1的副本 – mtripp100
@ mtripp100 - 是的,對不起,我找不到其他問題,但看起來像是重複的。我應該刪除它,還是標記爲重複? –