2010-06-15 3 views
3

Я только что взял старый проект, и я не уверен, что может означать следующая ошибка.Помогите с этой компиляцией

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: 

В строке 24 BufferedReader.cpp является #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 не определен?

Edit:

-Ijsoncpp/include/json/ Изменение к Ijsoncpp/include остановил ошибки. Я заметил, что я включил <json/json.h>.

Я собираюсь переключиться на JsonGlib, хотя, по этой причине я снова поднял проект. Так что все хорошо. :)

+1

** @ Scott ** Чтобы следовать рекомендациям, отправьте свое решение в качестве фактического ответа, а затем примите его. Редактирование вашего решения в вашем Вопросе затрудняет пользователям вопрос о том, чтобы решить вопрос для принятого ответа. –

ответ

3

Пробег: #include <cstring>.

+0

cstring, кажется, включает string.h, и ошибка все еще происходит. – Scott

+0

@Scott, да, но если вы делаете 'C++', по-прежнему рекомендуется включать 'cstring' вместо' string.h'. – ereOn

+0

@ereOn: Хорошо. Благодарю. – Scott

4

Странные ошибки, подобные этому, обычно происходят во включенном файле до того, который вы включили. Это часто бывает, когда класс в файле заголовка не заканчивается точкой с запятой (;). Проверьте, какой файл включен в строку 22 BufferedReader.cpp, и проверьте этот файл на наличие синтаксических ошибок до конца.

4

Причина этого своеобразного поведения, вероятно, является столкновением имен файлов: string.h содержит <features.h>, который обычно должен быть разрешен до /usr/include/features.h или аналогичного. Но в каталоге json/ также содержится features.h, поэтому, если он входит первым в путь включения, который будет включен вместо него, хотя он, вероятно, служит другой цели, чем string.h.

Смежные вопросы