现在我正在尝试通过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(); });
答案 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
标志。