帮助这个编译错误

我刚刚拿起一个旧的项目,我不知道下面的错误可能意味着什么。

g++ -o BufferedReader.o -c -g -Wall -std=c++0x -I/usr/include/xmms2 -Ijsoncpp/include/json/ -fopenmp -I/usr/include/ImageMagick -I/usr/include/xmms2 -I/usr/include/libvisual-0.4 -D_GNU_SOURCE=1 -D_REENTRANT -I/usr/include/SDL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_SCRIPT_LIB -DQT_SHARED -I/usr/include/QtCore -I/usr/include/QtGui -I/usr/include/QtScript BufferedReader.cpp In file included from BufferedReader.cpp:23: /usr/include/string.h:36:42: error: missing binary operator before token "(" In file included from /usr/lib/gcc/i686-redhat-linux/4.4.3/../../../../include/c++/4.4.3/cwchar:47, from /usr/lib/gcc/i686-redhat-linux/4.4.3/../../../../include/c++/4.4.3/bits/postypes.h:42, from /usr/lib/gcc/i686-redhat-linux/4.4.3/../../../../include/c++/4.4.3/iosfwd:42, from /usr/lib/gcc/i686-redhat-linux/4.4.3/../../../../include/c++/4.4.3/ios:39, from /usr/lib/gcc/i686-redhat-linux/4.4.3/../../../../include/c++/4.4.3/istream:40, from /usr/lib/gcc/i686-redhat-linux/4.4.3/../../../../include/c++/4.4.3/sstream:39, from BufferedReader.cpp:24: 

在BufferedReader.cpp的第24行是#include <string.h> 。 我已经用<string>试过了,但得到了同样的结果。 任何线索?

这里是string.h的代码片段

 /* Tell the caller that we provide correct C++ prototypes. */ #if defined __cplusplus && __GNUC_PREREQ (4, 4) //line 36 # define __CORRECT_ISO_CPP_STRING_H_PROTO #endif 

这是否意味着__GNUC_PREREQ没有被定义?

编辑:

-Ijsoncpp/include/json/更改为Ijsoncpp/include停止这些错误。 我注意到我包括<json/json.h>

我即将切换到JsonGlib,这就是我把项目拉回来的原因。 所以这一切都很好。 🙂

像这样的奇怪的错误通常发生在包含文件之前的包含文件中。 这通常是在头文件中的类不以分号(;)结束时。 检查BufferedReader.cpp第22行包含哪个文件,并检查该文件是否有语法错误。

这种特殊行为的原因可能是文件名冲突: string.h包含<features.h> ,通常应该解析为/usr/include/features.h或类似的文件。 但是json/ dir也包含一个features.h ,所以如果它在include路径中首先出现的话,那么它将被包含,尽管它可能与string.h需求不同。

尝试#include <cstring>