私はMinGW 4.8.2でQt 5.3を使用しています(クライアントの制限により、Qtバージョンはアップグレードできません)。 connect
にラムダ式を持つQTcpSocketがコンパイルエラーで終了します。Qt 5.3ラムダと接続
私は<QTcpSocket>
をインポートし、私のクラスはQObject
を一般に継承しています。 Q_OBJECT
マクロもヘッダーファイルに追加されています。
これは、私はラムダ関数にソケットを接続しようとしています方法です:
void TCPRequests::handleClient() {
QTcpSocket* sock = serv -> nextPendingConnection();
connect(sock, &QTcpSocket::readyRead, [sock]()
{
// Do nothing
});
}
これは、コンパイルし、MinGWの4.8.2でのQt 5.8でなく5.3で正常に動作します。
私はまた、 connect(sock, &QTcpSocket::readyRead, this, [sock]() {...});
(第3引数として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