2
我在Windows7平臺上使用Qt5.5.1。
我有以下代碼,編譯(並運行)細跟msvc2012構建試劑盒:Qt5:這段代碼編譯好了msvc2012,但卻給MinGW編譯錯誤...爲什麼?
void MyDialog::accept()
{
DataBase::instance()->logEventMessage(tr("Modified settings!"));
close();
}
其中logEventMessage是:
int logEventMessage(QString & eventDescription);
當我切換到MinGW的構建試劑盒,所述編譯器,所述:
否調用數據庫:: logEventMessage(QString的)匹配功能...
好了,固定的問題很容易(編譯器要求爲QString &那裏):
void MyDialog::accept()
{
QString text(tr("Modified settings!"));
DataBase::instance()->logEventMessage(text);
close();
}
然而,兩件事情仍然百思不得其解:
1)爲什麼最初的代碼被編譯OK用msvc2012構建工具包(雖然它不是用MinGW編譯)?
2)哪個編譯器是C++ 「正確」 ......;?)
這可能是允許將臨時對象綁定到非const左值引用的MSVC擴展 –
要修復它,請將該函數更改爲int logEventMessage(QString const&eventDescription);(它應該放在第一位,因爲在記錄日誌時不修改消息) –