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 :

"expected ';' before '(' token" étrange


Sujet :

C++

  1. #1
    Membre éclairé Avatar de argonath
    Homme Profil pro
    Ingénieur d'Etudes
    Inscrit en
    Juillet 2009
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'Etudes
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2009
    Messages : 248
    Par défaut "expected ';' before '(' token" étrange
    Bonjour, j'ai une class et ses héritières qui à la compilation me donnent une erreur "expected ';' before '(' token" dont je ne trouve pas la raison

    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
     
    #ifndef STATE_H_
    #define STATE_H_
     
    #include "wx/wx.h"
    #include "ZoneDeDessin.h"
    #include "DessinRectangle.h"
    #include "DessinEllipse.h"
     
    class State
    {
        public :
            State();
            virtual ~State();
            virtual Dessin CreerDessin(ZoneDeDessin * zoneDeDessin)=0;
    };
     
    #endif /* STATE_H_ */
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #ifndef CONCRETESTATESELECTION_H_
    #define CONCRETESTATESELECTION_H_
     
    #include "State.h"
     
    class ConcreteStateSelection : public State
    {
        public :
            ConcreteStateSelection();
            virtual Dessin CreerDessin(ZoneDeDessin* zoneDeDessin);
    };
     
    #endif /*CONCRETESTATESELECTION_H_*/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #ifndef CONCRETESTATERECTANGLE_H_
    #define CONCRETESTATERECTANGLE_H_
     
    #include "State.h"
     
    class ConcreteStateRectangle : public State
    {
        public :
            ConcreteStateRectangle();
            virtual Dessin CreerDessin(ZoneDeDessin* zoneDeDessin);
    };
     
    #endif /*CONCRETESTATERECTANGLE_H_*/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #ifndef CONCRETESTATEELLIPSE_H_
    #define CONCRETESTATEELLIPSE_H_
     
    #include "State.h"
     
    class ConcreteStateEllipse : public State
    {
        public :
            ConcreteStateEllipse();
            virtual Dessin CreerDessin(ZoneDeDessin* zoneDeDessin);
    };
     
    #endif /*CONCRETESTATEELLIPSE_H_*/
    J'ai l'erreur aux trois classes ainsi qu'un "`CreerDessin' declared as a `virtual' field " qui me laisse également un peu perplexe, vu que je ne vois pas pourquoi elles ne pourraient pas l'être

  2. #2
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    Salut,
    Au début de la compilation, aucun des éléments présents dans ton fichier state.h ne sont définis.
    Il va définir STATE_H_ et créer la classe State, OK.
    Puis il arrive sur CONCRETESTATESELECTION_H_ qui n'est pas défini.
    Donc il fait sont boulot, il le définit et arrive sur une inclusion de lui même?
    Je n'ai pas testé ton code, mais déjà je pense que tu peux enlever tous leset voir ce que ça donne.
    Bon courage

  3. #3
    Membre éclairé Avatar de argonath
    Homme Profil pro
    Ingénieur d'Etudes
    Inscrit en
    Juillet 2009
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'Etudes
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2009
    Messages : 248
    Par défaut
    je ne comprends pas ce que tu veux dire, ce sont trois fichiers différents (State.h,ConcreteStateSelection.h, ConcreteStateRectangle.h et ConcreteStateEllipse.h ) je les ait seulement mis ensemble ici par commodité.

    Et je suis obligé d'inclure State.h dans les classes qui en héritent

    non vu le message d'erreur j'ai simplement l'impression qu'il ne voit pas la dernière ligne de chaque comme un prototype de fonction

  4. #4
    Membre éclairé Avatar de argonath
    Homme Profil pro
    Ingénieur d'Etudes
    Inscrit en
    Juillet 2009
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'Etudes
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2009
    Messages : 248
    Par défaut
    non non elle est bien virtuelle pure et le compilo me met une erreur dans chacun des trois fichiers, toujours à la dernière ligne oui

    avec à chaque fois deux erreurs, la première complètement débile
    "`CreerDessin' declared as a `virtual' field" ( oui j'ai écrit virtual merci le compilo d'enfoncer des portes ouvertes)
    et ensuite
    "expected ';' before '(' token"

    et en remplacant "Dessin" par "void" pour voir, il me met aussi "`CreerDessin' declared as a `void' field"

    d'où l'idée que peut être il ne voit pas ça comme une fonction, ce qui expliquerait aussi le rejet des parenthèses

  5. #5
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    OK, au temps pour moi pour les fichiers, c'était pas précisé.
    Quel est le type de retour de ta fonction CreerDessin?

  6. #6
    Membre éclairé Avatar de argonath
    Homme Profil pro
    Ingénieur d'Etudes
    Inscrit en
    Juillet 2009
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'Etudes
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2009
    Messages : 248
    Par défaut
    oui pas bien grave c'est vrai que j'aurais dû dire que c'était des fichiers différents ^^

    le retour de la fonction est de type Dessin

    il n'y a pas de #include "Dessin.h" parceque c'est aussi un héritage et qu'il est sous entendu dans les #include "DessinRectangle.h" et "DessinEllipse.h"

  7. #7
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    As tu vérifié s'il ne manquerait pas un ; dans un des fichiers inclus (ZoneDeDessin.h, DessinRectangle.h ou DessinEllipse.h) ?

  8. #8
    Membre éclairé Avatar de argonath
    Homme Profil pro
    Ingénieur d'Etudes
    Inscrit en
    Juillet 2009
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'Etudes
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2009
    Messages : 248
    Par défaut
    le cas échéant m'aurait mis l'erreur dans le fichier concerné vu qu'il a du les lire pour les include non ?

    edit : j'ai vérifié par acquis de conscience, tout à l'air correct

    edit 2 : il y'a bien 4 fichiers et pas 3

  9. #9
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par argonath Voir le message
    le cas échéant m'aurait mis l'erreur dans le fichier concerné vu qu'il a du les lire pour les include non ?
    Pas nécessairement non.

    Sinon peux-tu fournir le code minimal présentant le problème

  10. #10
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    Souvent, cette erreur sort quand le compilateur ne voit pas la déclaration pour Dessin et/ou ZoneDeDessin.
    Ceci dit, rien qu'en prenant State.h, je me dit qu'il y a un problème :
    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
    #ifndef STATE_H_
    #define STATE_H_
     
    #include "wx/wx.h" //(1) 
    #include "ZoneDeDessin.h"  //(2) 
    #include "DessinRectangle.h"  // (3)
    #include "DessinEllipse.h"  // (4)
     
    class State
    {
        public :
            State();
            virtual ~State();
            virtual Dessin CreerDessin(ZoneDeDessin * zoneDeDessin)=0; //(5)
    };
     
    #endif /* STATE_H_ */
    (1) : State ne présent aucune classe wxWidget. Pourquoi cet include ?
    (2) et (5) : ZoneDeDessin n'est utilisé que par pointeur. Pourquoi ne pas utiliser une déclaration anticipée simplifiant probablement les dépendances entre en-têtes.
    (3) et (4) : Je ne vois rien qui mentionne Rectangle ou Ellipse. Donc cela me parait suspect.

    Ceci dit, State dépend fortement de Dessin. Dans ce cas, je préfère inclure 'Dessin.h' plutôt que de supposer que celui-ci est inclue par X qui inclue Y qui inclue Dessin.h.
    Voilà à quoi j'aurais aimé qu'un tel .h ressemble :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #ifndef STATE_H_
    #define STATE_H_
     
    #include "Dessin.h"
    class ZoneDeDessin;
    class State
    {
        public :
            State();
            virtual ~State();
            virtual Dessin CreerDessin(ZoneDeDessin * zoneDeDessin)=0;
    };
     
    #endif /* STATE_H_ */
    Et même, j'aurais peut être créé un ZoneDeDessinFwd.h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #ifndef ZoneDeDessinFwd_H
    #define ZoneDeDessinFwd_H
    class ZoneDeDessinFwd;
    #endif /* ZoneDeDessinFwd_H */
    et State.h devient :
    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
    #ifndef STATE_H_
    #define STATE_H_
     
    #include "Dessin.h"
    #include "ZoneDeDessinFwd.h"
     
    class State
    {
        public :
            State();
            virtual ~State();
            virtual Dessin CreerDessin(ZoneDeDessin * zoneDeDessin)=0;
    };
     
    #endif /* STATE_H_ */

  11. #11
    Membre éclairé Avatar de argonath
    Homme Profil pro
    Ingénieur d'Etudes
    Inscrit en
    Juillet 2009
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'Etudes
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2009
    Messages : 248
    Par défaut
    Le problème venait effectivement des inclusions en cascade c'est résolu, mais effectivement tes propositions amélioreront bien la logique de la chose

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 15/12/2011, 11h48
  2. Réponses: 3
    Dernier message: 02/08/2011, 09h22
  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. Réponses: 1
    Dernier message: 21/03/2009, 16h04

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