g ++:在'['标记之前预期的primary-expression

时间:2017-01-06 17:00:18

标签: c++ c++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)

3 个答案:

答案 0 :(得分:3)

Lambdas are not supported in GCC 4.4

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

答案 1 :(得分:2)

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

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

Screenshot of compilation on GCC 4.5.2

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

C++ Standards Support in GCC

答案 2 :(得分:1)

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

Meteor.users._transform = function (user) { ... return user; }

Here is a live example.