首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt5.3与lambda连接

Qt5.3与lambda连接
EN

Stack Overflow用户
提问于 2017-02-12 00:56:04
回答 1查看 606关注 0票数 2

我在MinGW 4.8.2中使用QT5.3(由于客户端的限制,Qt版本不能升级)。试图使用lambda表达式对connect进行QTcpSocket,最终会出现编译器错误。

我已经导入了<QTcpSocket>,我的类公开继承了QObjectQ_OBJECT宏也被添加到头文件中。

这就是我试图将套接字连接到lambda函数的方式:

代码语言:javascript
复制
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}’);

任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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支持。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42183070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档