当前位置: 首页 > 知识库问答 >
问题:

如果对QObject使用lambda函数::connect(),使用gcc编译失败

艾和通
2023-03-14

此代码编译没有任何问题Qt5.2.0 MSVC2012:

#include <QCoreApplication>
#include <QObject>
#include <QTimer>
#include <QDebug>

int main(int argc, char *argv[])
{
    QTimer timer;
    QCoreApplication a(argc, argv);

    QObject::connect(&timer, &QTimer::timeout,
            [=] () {
       qDebug() << Q_FUNC_INFO;
    });

    timer.start(1000);

    return a.exec();
}

但是如果我试着用Qt5编译它。2.0使用gcc时,我遇到以下错误:

../_测试夹具B/主。cpp:在函数“int main(int,char**)”中:/_测试夹具B/主。cpp:14:5:警告:lambda表达式仅适用于-std=c 11或-std=gnu 11[默认情况下启用]});^/_测试夹具B/主。cpp:14:6:错误:调用'QObject::connect(QTimer*,void(QTimer::)(QTimer::QPrivateSignal),main(int,char*)::_lambda0)}时没有匹配的函数;^/_测试夹具B/主。cpp:14:6:注:候选人:在文件中,包括在../中/Qt5/5.2。0/gcc_64/include/QtCore/qcoreapplication。h:48:0,从..//Qt5/5.2。0/gcc_64/include/QtCore/QCoreApplication:1,from/_测试夹具B/主。cpp:1:..//Qt5/5.2。0/gcc_64/include/QtCore/qobject。h:198:36:注意:静态QMetaObject::Connection QObject::connect(const QObject*,const char*,const QObject*,const char*,Qt::ConnectionType)静态QMetaObject::Connection connect(const-QObject*sender,const-char*signal,^../。/Qt5/5.2.0/gcc_64/include/QtCore/QObject.h:198:36:注意:候选者需要5个参数,提供3个./。/Qt5/5.2.0/gcc_64/include/QtCore/QObject.h:201:36:注意:静态QMetaObject::Connection(const-QObject*,const-QMetaMethod*)

问题在哪里?

共有1个答案

梁丘安晏
2023-03-14

正如注释中所回答的,使用-std=c11让它与gcc一起编译

 类似资料:
  • 我有一个包含一些用户对象的列表,我正在尝试对列表进行排序,但只使用方法引用,使用lambda表达式编译器会给出一个错误: 错误:

  • 问题内容: 现在,我已经在Windows 7上成功安装了Cython,我尝试使用Cython编译一些Cython代码,但是gcc使我的生活变得艰难。 使用gcc编译代码时,会抛出数十个 对 -erros的 未定义引用 ,并且我很确定src是可用的(如安装教程所述,如果缺少此文件,则会抛出 对 -errors的 未定义引用 )。 奇怪的是,使用*或-script可以很好地工作,但是当仍然在模块上工作

  • 问题内容: 它可以有效地编译到哪一个? 或类似的东西 那么它会替代(某种内联),还是实际上创建一个匿名类? 问题答案: VM决定如何实现lambda,而不是编译器。 请参阅《 Lambda表达式的翻译》中的部分。 我们没有生成字节码来创建实现lambda表达式的对象(例如,调用内部类的构造函数),而是描述了构造lambda的方法,并将实际构造委托给语言运行时。该配方被编码在invokedynami

  • 4.7. 使用 lambda 函数 4.7.1. 真实世界中的 lambda 函数 Python 支持一种有趣的语法,它允许你快速定义单行的最小函数。这些叫做 lambda 的函数,是从 Lisp 借用来的,可以用在任何需要函数的地方。 例 4.20. lambda 函数介绍 >>> def f(x): ... return x*2 ... >>> f(3) 6 >>> g =

  • 问题内容: 我有一个包含一些User对象的列表,我正在尝试对列表进行排序,但是只能使用方法引用来工作,对于lambda表达式,编译器会给出错误: 错误: 问题答案: 这是编译器的类型推断机制的一个弱点。为了推断ulambda的类型,需要建立lambda的目标类型。这是如下完成的。期待类型为的参数。在第一行中,需要返回。这意味着需要一个带参数的a 。因此,在第一行的中,必须为并且一切正常。 在第二行

  • 我在编写Azure函数时遇到了一个奇怪的问题。我使用HttpClient从Web服务获取数据,但当我运行该函数时,我得到“脚本编译失败”。为了解决这个问题,我编写了一个新的Azure函数,在其中我只检索HTML响应: 我正在使用 Azure 门户。调用日志给我这个错误: 执行函数时异常:Functions.TestFunctionAsync Microsoft.Azure.WebJobs.Host