【问题标题】:lambda expression under g++ compiler in linuxlinux中g++编译器下的lambda表达式
【发布时间】:2014-04-25 11:59:27
【问题描述】:

我需要使用 c++ find_if() lambda 表达式,在我的 vc 编译器中它编译没有任何错误,我无法在 linux:debian:g++4.4 中编译它:

-CPP函数:

    istream_iterator<string> it = find_if(istream_iterator<string>(ss),
        f,
        [=](const string& str)
        {return str == to_string(urlHash);});

-错误输出:

    -error: expected primary-expression before '[' token
    -error: expected primary-expression before '=' token
    -error: expected primary-expression before ']' token
    -error: expected primary-expression before 'const'

问题 1:这是与 c++ 版本相关的问题吗,尽管使用了 -std=c++0x 标志,但没有任何变化。

问题 2:我不能使用 -std=c++11 标志,尽管我在我的机器上安装了 gcc 4.7。

谢谢;

【问题讨论】:

  • Lambdas 是在 gcc4.5 中引入的。
  • @Malloc 我如何在 debian 中更新到 4.5 或更高版本
  • 您使用online compiler 是否收到相同的错误,大多数支持C++11 ...Coliru 使得调整标志变得简单,并且g++-4.6 到g++-4.8 也一样作为clang++?如果是这样,您能否提供其中一个的活生生的例子?
  • 嗨@ShafikYaghmour,当我用visual studio编译我的代码时,我没有收到任何错误,所以我猜我的代码正在工作。
  • @Reda 不幸的是,由于不同级别的标准支持、错误或扩展,各种编译器并不总是一致。这就是为什么提供MCVE 很重要,并且提供一个活生生的例子更好。

标签: c++ linux gcc lambda g++


【解决方案1】:

问题 1:这是与 c++ 版本相关的问题吗,尽管使用了 -std=c++0x 标志,但没有任何变化。

是的。 GCC 4.4 不支持 Lambda。您将需要升级到或安装 4.5 或更高版本。详情请见here。

问题 2:我不能使用 -std=c++11 标志,尽管我在我的机器上安装了 gcc 4.7。

这不是问题。

【讨论】:

  • 嗨,请问我如何升级到 4.7,我真的是 linux 新手
  • @Reda 您可能必须找到替代存储库或从源代码安装。注意不要用新版本替换您的系统 gcc 和 g++(可能在 /usr/bin/gcc 和 /usr/bin/g++)。将其安装在其他地方(例如/opt/local),并显式调用该版本。
【解决方案2】:

如果你们对此感兴趣,我找到了一种安装 gcc-4.7 的方法,方法是在每个 linux 系统中自行构建 链接:

http://gcc.gnu.org/install/

【讨论】:

    猜你喜欢
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多