類的對過載函式的呼叫不明確

pamxy發表於2013-07-28

今天犯了一個錯誤:

HMenu(QWidget* _parent=0);
HMenu(QString _txt = " ", QWidget* _parent=0);

提示說:錯誤 1 error C2668: “HMenu::HMenu”: 對過載函式的呼叫不明確 f:\workspace\myclasslibraries\hgui\hgui\src\HMenu.h

在網上搜都是說由於int 或 float 等的隱式轉換導致的,那麼我就用在這個兩個建構函式前加個explicit 唄,還是不行。

最後終於知道問題了,

HMenu(QWidget* _parent=0); 跟HMenu(),對於編譯器來說是一個樣的,所以編譯器不知呼叫哪個函式,

HMenu(QWidget* _parent=0); 與 HMenu(QString _txt = “ ”, QWidget* _parent=0); 也是同樣道理,

所以在QString _txt = " ",把預設引數(=" ")去掉了,就OK了。

當這兩個建構函式在APP上還沒有報錯,但我想封裝成一些控制元件到DLL裡,就出現這個問題了,估計是C語言最後翻譯函式的問題什麼的吧——    ——

相關文章