Я использую Qt 5.3 с MinGW 4.8.2 (из-за ограничений клиента версия Qt не может быть обновлена). Попытка connect
QTcpSocket с выражением лямбда заканчивается ошибкой компилятора.Qt 5.3 connect with lambda
Я импортировал <QTcpSocket>
, и мой класс наследует QObject
публично. Макрос Q_OBJECT
также был добавлен в файл заголовка.
Это, как я пытаюсь подключить разъем к лямбда-функции:
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]() {...});
(примечание, я также передаю в качестве третьего аргумента), но это не имеет значения.
В результате ошибки:
Первое:
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