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 de compilation : expected unqualified-id


Sujet :

C++

  1. #1
    Membre éclairé Avatar de richard_sraing
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2005
    Messages : 483
    Par défaut Erreur de compilation : expected unqualified-id
    Bonjour tout le monde.

    Voilà ce petit message car je rencontre une erreur lors de la compilation de mon applic.

    Lors de celle-ci, il me renseigne l'erreur suivante:

    ./Exception.h:24 error: expected unqualified-id before 'using'
    Voilà, maintenant je ne sais pas pourquoi il me fait l'erreur maintenant, alors qu'il y a deux semaines tout allais bien

    Voici la partie de mon code:

    La fameuse ligne 24 est celle située dans le "elif LINUX #include ..." au using
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    #ifndef _EXCEPTION
    #define _EXCEPTION
     
    #ifdef VISUAL
    #include <iostream.h>
    #elif BORLAND
    #include <iostream.h>
    #elif DEC
    #include <stream.h>
    #elif SUN
    #include <iostream>
    using namespace std;
    #elif LINUX
    #include <iostream>
    using namespace std;
    #endif
     
    /*
    * tout mon code des exceptions
    * je pense qu'il ne vous serait d'aucune utilitée ;) 
    */
     
    #endif
    Quelqu'un aurait-il une idée de la provenance de cette erreur?

    Merci d'avance pour votre aide.

    Richard_sraing

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    T'as vraiment besoin d'inclure autre chose que <iostream> avec certains compilos ? (Visual C++ et Borland C++ le supportent très bien)

    De plus, faire un using namespace dans un en-tête est déconseillé, voir FAQ pour plus de détails.

    A part ça je ne sais pas ce qui provoque ton erreur.

  3. #3
    Membre éclairé Avatar de richard_sraing
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2005
    Messages : 483
    Par défaut
    En fait je suis sous linux, et par après je devrais porter l'applic sur une machine Sunray.

    Notre prof nous a dit, dès le début de l'année, qu'on devait les mettre dedans, et jusque maintenant je n'ai jamais eu de problèmes avec.

    De toute façon, le cpp, moi j'aime pas. Surtout quand on doit le faire sur des terminaux où on a que vi pour éditer le code.

    Quoiqu'il en soit, si jamais quelqu'un a une autre idée, merci.

    Richard_sraing

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par défaut
    On nous faisait aussi développer des applics sur un vieux compilo tout pourri et pas du tout compatible avec le standard: cxx. Tu ne serais pas à l'inpres des fois?

  5. #5
    Membre éclairé Avatar de richard_sraing
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2005
    Messages : 483
    Par défaut
    bah si pourquoi?

    pas cool de faire du cpp la bas hein?

    dans d'autre ecole, je sais bien qu'il ne sorte pas de windows pour la progra

    m'enfin, avec tout ça, je ne sais toujours pas d'ou vient mon erreur

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par défaut
    Pour les autres écoles je sais pas, mais la bas il est vrai qu'on ne s'amuse pas trop avec les cours C++ du moustachu
    Bon, ça va pas être facile de t'aider parcequ'à l'époque je ne suivais que ces cours et n'utilisait que ce compilateur + visual C++ 6. Autant dire que j'étais un bien mauvais programmeur incapable de faire du code standard
    Tout d'abord, inutile de faire 1000 tests de includes. Tous les compilateurs que tu trouveras actuellement sont largement assez conformes aux standards pour te contenter de faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #include <iostream>
    using namespace std;
    La seule difficulté c'est de parvenir à cibler à quel point ce compilo n'est pas conforme. Tout d'abord, crée toi un fichier de test et colle le précédent code (je doute que ça fonctionne mais on ne sait jamais). Si ça ne marche pas, il faut inclure iostream.h ou stream.h (de tête je dirais plutot le premier) suivant une directive de compilation qu'il te faudra trouver. Peut-être SUN fonctionnera, sinon tu peux aller jeter un coup d'oeil à la doc de ce compilateur: http://h30097.www3.hp.com/cplus/ugu_...ml#implem_chap, même si elle me semble beaucoup trop récente pour le cas qui te préoccupe.
    Autre chose: pour programmer chez toi, utilises gcc ou mingw (c'est probablement le cas), c'est le plus strict et donc celui qui est le plus intéressant pour la portabilité. Et puis si ça te chagrine de taper le code avec vi, devcpp sous windows fonctionne très bien et t'installe tout d'un coup.
    Pour ton erreur, vérifie si ce n'est pas un problème dans un autre fichier qui incluerait ou serait inclu dans celui-ci (le coup classique de la définition de classe sans le ; à la fin?). Qui plus est, je ne pense pas que tous tes #elif créent le même effet que ton premier #ifdef, ca fonctionnerait mieux avec un #elif defined(SUN) (qu'on me corrige si je dis une bétise).

  7. #7
    Membre éclairé Avatar de richard_sraing
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2005
    Messages : 483
    Par défaut
    Bon alors voilà,

    après mainte recherche sur la toile, j'ai pu remarquer que le problème que j'ai n'est pas fréquent.

    Effectivement, dans certains cas de l'apparition de l'erreur, elle est due simplement au fait d'avoir oublier le ';' à la fin de la déclaration de la classe.

    Ce n'est pas le cas chez moi.

    Dans d'autres cas, l'erreur est due au fait qu'il falalit faire un include non pas de "iostream", mais de "iostream.h".

    Ce n'est pas le cas chez moi non plus. En effet, lorsque je tente de faire un include de iostream.h au lieu de iostream, il me fait toute une série d'erreur.

    Donc, je me permet d'insister dans le fait que je n'ai absolument aucune idée d'où peut provenir mon erreur.

    Pour ceux qui le souhaite, je vous donne le fichier dans lequel il me fait l'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
     
    //-----------------------------------------------
    // Exception.h
    //-----------------------------------------------
    // realise par: Richard
    // groupe: xxxx
    //-----------------------------------------------
    // Date de derniere modification: 09/08/2007
    //-----------------------------------------------
     
    #ifndef _EXCEPTION
    #define _EXCEPTION
     
    #ifdef VISUAL
    #include <iostream.h>
    #elif BORLAND
    #include <iostream.h>
    #elif DEC
    #include <stream.h>
    #elif SUN
    #include <iostream>
    using namespace std;
    #elif LINUX
    #include <iostream>
    using namespace std;    // la fameuse ligne 24
    #endif
     
    // InvalidValueException
    // lancee si la valeur de la piece de musee n'est pas une valeur strictement positive
    // I:	/
    // P:	Exception de la valeur de la piece de musee
    // O:	/
    class InvalidValueException
    {
    public:
    	int cause;
     
    	InvalidValueException(int c): cause(c){}
     
    	InvalidValueException(const InvalidValueException& source): cause(source.cause) {}
    };
     
    // InvalidIDException
    // lancee si le premier caractere de l'identifiant de la piece n'est pas une lettre
    // I:	/
    // P:	Exception de la valeur de l'identifiant
    // O:	/
    class InvalidIDException
    {
    public:
    	int cause;
     
    	InvalidIDException(int c): cause(c) {}
     
    	InvalidIDException(const InvalidIDException& source): cause(source.cause) {}
    };
     
    // InvalidDateException
    // lancee si la chaine de caractere representant la date de naissance ne respecte pas le format predefini
    // I:	/
    // P:	Exception de format de date
    // P:	/
    class InvalidDateException
    {
    public:
    	int cause;
     
    	InvalidDateException(int c): cause(c) {}
     
    	InvalidDateException(const InvalidDateException& source): cause(source.cause) {}
    };
     
    // OnlyOneConservatorException
    // lancee si on instancie le conservateur du musee plus d'une fois
    // I:	/
    // P:	Exception de l'unicite du conservateur
    // O:	/
    class OnlyOneConservatorException
    {
    public:
    	int cause;
     
    	OnlyOneConservatorException(int c): cause(c) {}
     
    	OnlyOneConservatorException(const OnlyOneConservatorException& source): cause(source.cause) {}
    };
    #endif
    J'ai aussi penser au fait que l'erreur pourrait probablement venir du fait que j'aurais une "crasse" (un caractère indésirable) dans mon fichier. J'ai vérifier à l'aide de vi, mais ce n'est pas le cas non plus.
    J'ai essayer de copier / coller le code dans un nouveau fichier, mais ça ne change rien non plus.

    J'ai essayer de mettre tout ce qui ne concerne pas LINUX dans les directives de précompilation en commentaires, mais cela ne change rien non plus.

    Est ce que quelqu'un pourrait me venir en aide? Je ne vois vraiment pas, peut-être parce que l'erreur est trop évidente, ou alors simplement parce que je suis trop mauvais, aucune idée, mais aidez moi s'il vous plait.

    pour rappel, on erreur est la suivante, et elle apparait lors de la compilation:

    ./Exception.h:24: error: expected unqualified-id before 'using'
    make: **** [Main] Erreur 1
    Richard

  8. #8
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 60
    Par défaut
    fo mettre un ; apres la declaration de ta class !!!!

  9. #9
    Membre chevronné
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    Par défaut
    Bonjour,

    Laurent t'a tout dit, on n'utilise pas de using dans un header (ou en-tête, ou fichier .h) !
    Si ton prof dit l'inverse, c'est qu'il est nul.
    Mais à mon avis, tu as mal compris. Il a certainement dû dire que tu doives écrire ce code au début de chaque fichier d'implémentation (fichiers .cpp). Là, oui, d'accord, étant donné que sans iostream, tu ne peux utiliser ni std::cout, ni std::cin.

    De plus, tu n'as besoin de iostream nulle part dans le code de cette en-tête.
    Tu peux donc supprimer tout ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #ifdef VISUAL
    #include <iostream.h>
    #elif BORLAND
    #include <iostream.h>
    #elif DEC
    #include <stream.h>
    #elif SUN
    #include <iostream>
    using namespace std;
    #elif LINUX
    #include <iostream>
    using namespace std;    // la fameuse ligne 24
    #endif
    Cours : Initiation à CMake
    Projet : Scalpel, bibliothèque d'analyse de code source C++ (développement en cours)
    Ce message a été tapé avec un clavier en disposition bépo.

  10. #10
    Candidat au Club
    Inscrit en
    Décembre 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 2
    Par défaut
    Citation Envoyé par simoelasimo Voir le message
    fo mettre un ; apres la declaration de ta class !!!!
    Exact, merci

Discussions similaires

  1. Réponses: 4
    Dernier message: 29/04/2012, 17h20
  2. erreur : expected unqualified-id before '+' token
    Par issmaz dans le forum Débuter
    Réponses: 3
    Dernier message: 27/10/2011, 10h21
  3. Réponses: 3
    Dernier message: 15/05/2009, 16h18
  4. erreur: expected unqualified-id
    Par Le Barde dans le forum C++
    Réponses: 3
    Dernier message: 11/07/2007, 15h50

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