C ++错误:在'['标记之前预期的primary-expression

时间:2014-11-06 16:43:38

标签: c++ c++11 lambda g++

现在我正在尝试通过dklab安装RealPlexor,但它出现了错误:

# bash ./Make.sh 
In file included from dklab_realplexor.cpp:68:
utils/misc.h: In function ‘void die(std::string)’:
utils/misc.h:105: error: expected primary-expression before ‘[’ token
compilation terminated due to -Wfatal-errors.

这是该行

s = regex_replace(s, regex("\\$!"), [](smatch s) { return strerrno(); });

2 个答案:

答案 0 :(得分:2)

确保将以下标志传递给编译器(如the g++ documentation中所述):

-std=c++11

这告诉gcc编译器(g ++)用C ++ 11语义编译你的代码。

您正在使用的lambda表达式语法(以[]开头的部分)是C ++ 11的一项功能,如果编译器出现在代码中并且不希望是C +,则会导致编译器混淆不清11。

然而,正如此处的另一条评论所指出的(并由this table确认,您正在运行的gcc版本(4.4.5,根据评论)没有lambda表达式支持。必须使用函数对象,或者升级到更新版本的gcc / g ++。

答案 1 :(得分:0)

说完

s = regex_replace(s, regex("\\$!"), *(smatch s) { return strerrno(); });

[]运算符通常用于索引某些内容(如字符数组),因此C ++需要一些东西在它前面

也可以试试@DavidO的这个建议:

您正在使用lambda表达式,这是一种C ++ 11语法,但可能没有将您的编译器设置为识别C ++ 11。如果您使用的是g ++,则可以使用-std=c++11标志。