我在MinGW 4.8.2中使用Qt 5.3(由於客戶端限制Qt版本無法升級)。 嘗試connect
帶有lambda表達式的QTcpSocket最終出現編譯器錯誤。Qt 5.3與lambda連接
我導入了<QTcpSocket>
,我的班級公開繼承QObject
。 Q_OBJECT
宏也被添加到頭文件中。
這是我正在試圖將套接字連接到lambda函數:
void TCPRequests::handleClient() {
QTcpSocket* sock = serv -> nextPendingConnection();
connect(sock, &QTcpSocket::readyRead, [sock]()
{
// Do nothing
});
}
這編譯和正確適用於Qt的5.8,但不是在5.3 MinGW的4.8.2。
我也試過做 connect(sock, &QTcpSocket::readyRead, this, [sock]() {...});
(注意我也是通過this
作爲第三個參數),但沒有區別。
產生的錯誤是:
第一:
D:\Documents\Development\X\TCPRequests.cpp:43: error: no matching function for call to 'TCPRequests::connect(QTcpSocket*&, void (QIODevice::*)(), TCPRequests::handleClient()::__lambda0)' });
二:
D:\Documents\Development\X\TCPRequests.cpp:43: error: template argument for 'template static typename QtPrivate::QEnableIf<((int)(QtPrivate::FunctionPointer::ArgumentCount) >= 0), QMetaObject::Connection>::Type QObject::connect(const typename QtPrivate::FunctionPointer::Object*, Func1, Func2)' uses local type 'TCPRequests::handleClient()::__lambda0' });
三:
D:\Documents\Development\X\TCPRequests.cpp:43: error: template argument for 'template static typename QtPrivate::QEnableIf<(QtPrivate::FunctionPointer::ArgumentCount == (-1)), QMetaObject::Connection>::Type QObject::connect(const typename QtPrivate::FunctionPointer::Object*, Func1, Func2)' uses local type 'TCPRequests::handleClient()::__lambda0' });
任何幫助將是非常讚賞!
非常感謝!在這種情況下,Qt Creator會提醒你很高興 – vagaerg