我在MinGW 4.8.2中使用QT5.3(由于客户端的限制,Qt版本不能升级)。试图使用lambda表达式对connect进行QTcpSocket,最终会出现编译器错误。
我已经导入了<QTcpSocket>,我的类公开继承了QObject。Q_OBJECT宏也被添加到头文件中。
这就是我试图将套接字连接到lambda函数的方式:
void TCPRequests::handleClient() {
QTcpSocket* sock = serv -> nextPendingConnection();
connect(sock, &QTcpSocket::readyRead, [sock]()
{
// Do nothing
});
}它在QT5.8上正确编译和工作,但在MinGW 4.8.2的5.3上没有正确的编译和工作。
我也尝试过做connect(sock, &QTcpSocket::readyRead, this, [sock]() {...}); (注意,我也将this作为第三个参数传递),但这并没有什么区别。
由此产生的错误如下:
第一:
D:\Documents\Development\X\TCPRequests.cpp:43:错误:对‘TCPRequest:connect(QTcpSocket*&,void (QIODevice::*)(),TCPRequest::handleClient()::__lambda0}’)的调用没有匹配函数);
第二:
D:\Documents\Development\X\TCPRequests.cpp:43:错误:模板静态名称QtPrivate::QEnableIf<((int)(QtPrivate::FunctionPointer::ArgumentCount) >= 0的模板参数,QMetaObject::Connection>::Type QObject::connect(const::FunctionPointer::Object*,Func1,Func2)‘使用本地类型’TCPRequest::handleClient()::__lambda0‘};
第三:
D:\Documents\Development\X\TCPRequests.cpp:43:错误:模板静态名称QtPrivate::QEnableIf<(QtPrivate::FunctionPointer::ArgumentCount == (-1)、QMetaObject::Connection>::Type QObject::connect(const::FunctionPointer::Object*、Func1、Func2)的模板参数使用本地类型‘TCPRequest::handleClient()::__lambda0}’);
任何帮助都将不胜感激!
发布于 2017-02-12 05:34:39
您可能希望将CONFIG += c++11添加到项目文件(.pro文件)中,以便在项目中启用c++11功能。
QT5.8中没有出现错误的原因是,在QT5.7.0中启动,默认情况下启用了c++11,不支持不支持c++11的旧编译器。见备注
编译器所需的C++11支持 Qt在Qt应用程序中启用C++11已经有很长时间了,但是在Qt5.7中,我们还允许在Qt模块中使用C++11。因此,QT5.7需要编译器对C++11的支持,并取消了来自较早编译器的支持,这些编译器没有提供足够的C++11支持。
https://stackoverflow.com/questions/42183070
复制相似问题