2010-06-15 6 views
3

Je viens de prendre un vieux projet et je ne suis pas sûr de ce que l'erreur suivante pourrait signifier.Aide avec cette erreur de compilation

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: 

À la ligne 24 de BufferedReader.cpp est #include <string.h>. Je l'ai essayé avec juste <string> mais obtenir la même chose. Une idée?

Voici l'extrait de code de 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 

Est-ce que cela signifie __GNUC_PREREQ n'est pas défini?

Edit:

Changer -Ijsoncpp/include/json/-Ijsoncpp/include arrêté les erreurs. J'ai remarqué que j'inclus <json/json.h>.

Je suis sur le point de passer à JsonGlib, c'est la raison pour laquelle j'ai repris le projet. Donc tout va bien. :)

+1

** @ Scott ** Pour suivre les directives, veuillez poster votre solution comme réponse réelle, puis l'accepter. Si vous modifiez votre solution dans votre question, il est plus difficile pour les utilisateurs de parcourir une question pour obtenir une réponse acceptée. –

Répondre

3

Essayez #include <cstring>.

+0

cstring semble inclure string.h et l'erreur se produit toujours. – Scott

+0

@Scott, oui mais si vous faites C++, il est recommandé d'inclure 'cstring' au lieu de' string.h'. – ereOn

+0

@ereOn: Ok. Merci. – Scott

4

De telles erreurs étranges se produisent généralement dans le fichier d'inclusion avant celui que vous avez inclus. C'est souvent le cas lorsqu'une classe d'un fichier d'en-tête ne se termine pas par un point-virgule (;). Vérifiez quel fichier est inclus sur la ligne 22 de BufferedReader.cpp et vérifiez ce fichier pour les erreurs de syntaxe vers la fin.

4

La raison de ce comportement particulier est probablement une collision de nom de fichier: string.h comprend <features.h> qui devrait normalement résoudre à /usr/include/features.h ou similaire. Mais le répertoire json/ contient également un features.h, donc s'il vient en premier dans le chemin d'inclusion, il sera inclus à la place, bien qu'il serve probablement un but différent de celui de string.h.