IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

erreur: invalid use of ‘::’ et erreur: expected ‘;’ before ‘<’ token


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 51
    Points : 26
    Points
    26
    Par défaut erreur: invalid use of ‘::’ et erreur: expected ‘;’ before ‘<’ token
    Bonjour,

    Je souhaite compiler une application avec cmake, sous Linux.
    Après avoir créer mon CMakeLists.txt, je fais donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cmake -G "Unix Makefiles" .
    make
    dans le répertoire contenant mon CMakeLists.txt.
    J'ai alors 2 erreurs :
    In file included from /home/moi/workspace/MyProject/Sources/MainWindow.cpp:56:
    /usr/local/include/externalLibraryName/externalLibraryNameCore/anIncludeFile.h:249: erreur: invalid use of ‘::’
    /usr/local/include/externalLibraryName/externalLibraryNameCore/anIncludeFile.h:249: erreur: expected ‘;’ before ‘<’ token
    make[2]: *** [CMakeFiles/myproject.dir/Sources/MainWindow.cpp.o] Erreur 1
    make[1]: *** [CMakeFiles/myproject.dir/all] Erreur 2
    make: *** [all] Erreur 2
    Les lignes 248-249 de anIncludeFile.h sont
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    struct imp;
    boost::shared_ptr<imp> _p;
    J'ai remarqué qu'ajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #include <boost/shared_ptr.hpp>
    au début de anIncludeFile.h résolvait mon problème.

    Mais je préférerais ne pas avoir à modifier cette librairie externe.
    De plus, cette librairie externe se compile parfaitement. Donc le problème doit venir de mes CMakeLists.txt, et non pas de la librairie externe.
    Qu'en pensez-vous?

    Merci par avance pour votre aide.

  2. #2
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    De prime abord, si la compilation est sensée se dérouler correctement sans avoir effectivement inclus le fichier d'en-tête de boost::shared_ptr, c'est que le dit fichier (ou l'un des fichiers qui l'inclus de manière directe ou indirecte) est sensé être inclus directement par la commande de compilation.

    Il ne serait d'ailleurs pas exclu qu'il existe un fichier d'en-tête quelconque incluant toute une série de fichiers (ceux de la STL ) dont boost/shared_ptr.hpp et définissant, pourquoi pas, une api d'exportation pour dll ( UNE_DLL_API )

    Si tu ne veux pas modifier le fichier en question (ce que je peux comprendre), il faut donc que tu ajoute à la commande de compilation soit l'inclusion du fichier manquant de boost soit l'inclusion de ce fichier dans lequel toutes les inclusions "externes" sont effectuées.

    Sous Gcc, cela se traduirait par l'ajout de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    -iboost/shared_ptr.hpp /* ou -ifichier_api.hpp */
    (où fichier_api.hpp est le fichier d'en-tête dont je parle depuis le début ) à la commande g++
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juillet 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 51
    Points : 26
    Points
    26
    Par défaut
    Merci pour ta réponse!

    J'ai trouvé la solution à mon problème, mais je n'ai pas compris pourquoi ça marche.

    Je me suis inspiré du CMakeLists.txt du projet permettant de compiler la librairie externe en question (celle qui n'inclut pas boost/shared_ptr.hpp dans le fichier utilisant boost::shared_ptr).
    J'ai juste ajouté la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ADD_DEFINITIONS(-DUSE_BOOST_REGEX)
    dans mon CMakeLists.txt, et ça compile.

    D'après la doc CMake (http://www.cmake.org/cmake/help/cmak...dd_definitions) :
    add_definitions: Adds -D define flags to the compilation of source files.
    Que fait le drapeau USE_BOOST_REGEX? Comment est-il utilisé par le compilateur? Tous les drapeaux commençant par "USE" sont-ils utilisés de la même façon?

    Merci par avance.

  4. #4
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Il y a surement, quelque part dans le projet, un fichier (config.h non_de_la_lib_api.h ) qui est inclus sans doute presque partout dans lequel tu aura, entre autre un code proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #ifdefined USE_BOOST_REGEX
    #include <boost/shared_ptr.hpp>
    /* some other include files */
    #endif
    Et, oui, de manière générale, tous les drapeaux commençant par USE seront utilisés de façon sensiblement identique
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. Réponses: 7
    Dernier message: 15/12/2011, 11h48
  2. Erreur sur plusieurs sommes (recordset) invalid use of null
    Par pra3t0r dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 10/07/2011, 17h51
  3. erreur: expected ‘)’ before ‘*’ token
    Par troumad dans le forum GTK+ avec C & C++
    Réponses: 7
    Dernier message: 12/10/2010, 21h24
  4. Réponses: 5
    Dernier message: 01/02/2010, 14h06
  5. [debutant]erreur invalid lvalue in assignment
    Par Battosaiii dans le forum C
    Réponses: 3
    Dernier message: 30/11/2005, 17h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo