帮助解决此编译错误

时间:2010-06-15 05:44:01

标签: c++ linux

我刚拿起一个旧项目,我不确定以下错误是什么意思。

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,这就是我再次启动项目的原因。所以这一切都很好。 :)

3 个答案:

答案 0 :(得分:4)

尝试#include <cstring>

答案 1 :(得分:4)

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

答案 2 :(得分:4)

这种特殊行为的原因可能是文件名冲突:string.h包括<features.h>,它通常应解析为/usr/include/features.h或类似。但json/目录还包含features.h,因此如果它首先出现在包含路径中,则会包含该路径,但它可能与string.h需要的目的不同。