2011-07-24 28 views
4

下面的代碼段給出了編譯錯誤 call of overloaded ‘QString(int)’ is ambiguous與QT 4.7.3 (系統是Linux 64位,的Debian不穩定)重載「的QString(int)的」不明確

struct QSAConnection 
{ 
    QSAConnection() : sender(0), signal(0), function_ref() { } 
    QSAConnection(QObject *send, const char *sig, QSObject ref) 
    : sender(send), signal(QLatin1String(sig)), function_ref(ref) { } 
    QObject *sender; 
    QString signal; 
    QSObject function_ref; 
}; 

任何提示嗎?

回答

5

相關位是這一行:

QSAConnection() : sender(0), signal(0), function_ref() { } 

由於signalQString,該signal(0)位試圖呼籲QString類,帶有一個整數作爲其唯一參數的構造函數。根據Qt文檔,QString沒有這樣的構造函數。但它確實有一個構造函數採取charQChar,它有從int隱式轉換。我期望這兩者之間不明確。

你的意思是呢?

QSAConnection() : sender(0), signal(), function_ref() { } 

這將默認初始化signal。請注意,從技術上講,在這種情況下,沒有必要將它包含在初始化程序列表中。

+0

+1:絕對正確;很好的解釋和良好的建議。 –

0

這是一件好事。如果不明確,您可能會在QString::QString(char const* src)上遇到空指針異常。這是std::string的常見錯誤。

相關問題