【问题标题】:g++: expected primary-expression before ‘[’ tokeng++:“[”标记之前的预期主表达式
【发布时间】:2017-05-21 12:02:11
【问题描述】:

我试图找出向量 y 的所有元素是否等于 1。以下代码在 Visual Studio 中运行良好,但在 linux 中使用 g++ (g++ -std=c++0x) 它给了我这个错误: '[' 标记之前的预期主表达式

bool x = all_of(y.begin(), y.end(), [](unsigned char j) {return j == 1;});

任何帮助将不胜感激。

我的 gcc 版本是:g++ (GCC) 4.4.7 20120313 (Red Hat 4.4.7-17)

【问题讨论】:

  • 你用的是什么版本的g++?
  • 你确定你启用了 c++11 吗?或者也许你有一个古老版本的 g++。
  • -std=c++0x 这表明一个旧的编译器。那是什么版本的 GCC?
  • @Ali 那快五岁了。是时候升级了。
  • 使用实际的函数/函数指针

标签: c++ c++11


【解决方案1】:

Lambdas are not supported in GCC 4.4.

升级您的编译器。您需要 GCC 4.5 或更高版本,但如果可以,请进入现代。

【讨论】:

  • @GillBates 你在嘲笑,但是 Turbo C++ 又回来了,伙计。就像迪斯科一样。
【解决方案2】:

您的编译器不支持 lambda 表达式。编译器不支持 C++11 或新传入标准附带的所有功能。因此,您需要检查编译器支持哪些标准。

你可以看到如果我选择 gcc-4.4.7 相同的错误(lambda 表达式错误)但是如果我选择 gcc-4.5.3

没有错误。总之,您必须更改您的编译器(>= gcc-4.5)才能使用 lamda 表达式。

【讨论】:

    【解决方案3】:

    GCC 4.4 不支持 Lambda。您可以将编译器升级到 4.5 或更高版本,或使用函数:

    bool compFun(int i) {
        return i == 1;
    }
    ...
    bool res = all_of(a.begin(), a.end(), compFun);
    

    Here is a live example.

    【讨论】:

      猜你喜欢
      • 2013-08-29
      • 2013-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-13
      • 2017-09-24
      相关资源
      最近更新 更多