C++错误:“[”标记之前应为主表达式

C++ error: expected primary-expression before ‘[’ token

本文关键字:表达式 错误 C++      更新时间:2023-10-16

现在我正试图通过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(); });

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

-std=c++11

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

您正在使用的lambda表达式语法(以[]开头的部分)是C++11的一个特性,如果它出现在代码中,而编译器不希望它是C++11,则会给编译器带来很大的混乱。

然而,正如在这里的另一个注释中所指出的(并由该表证实),您正在运行的gcc版本(4.4.5,每个注释)不支持lambda表达式。可能必须使用函数对象,或者升级到更新版本的gcc/g++。

只需说

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

[]运算符通常用于索引某些内容(如字符数组),因此C++希望前面有

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

您使用的lambda表达式是C++11语法,但可能尚未将编译器设置为识别C++11。如果您使用g++,您将使用-std=c++11标志。