Помогите с этой ошибкой компиляции - PullRequest
4 голосов
/ 15 июня 2010

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

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 не определен?

Редактировать:

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

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

Ответы [ 3 ]

4 голосов
/ 15 июня 2010

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

4 голосов
/ 24 марта 2011

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

4 голосов
/ 15 июня 2010

Попробуйте #include <cstring>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...