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

Visual C++ Discussion :

"error C2143: syntax error : missing ';' before '*'" systématique


Sujet :

Visual C++

  1. #21
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Il faut que cette pratique soit généralisée pour qu'on commence à mieux voir ce qui se passe.

    Et s'assurer de ne plus avoir d'inclusions cycliques.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  2. #22
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Le problème des inclusions cycliques, c'est qu'avec les gardes telles que tu les as définis, tu as toujours un header dont le contenu est défini avant l'autre.
    Exemple:
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    //A.h
    #ifndef H_A
    #define H_A
     
    //Avant B.h
    #include "B.h"
    //Apres B.h
     
    class CA
    {
    	B* pb;
    };
    #endif
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    //B.h
    #ifndef H_B
    #define H_B
     
    //Avant A.h
    #include "A.h"
    //Apres A.h
     
    class CB
    {
    	A* pa;
    };
    #endif
    Si je compile un fichier qui inclut A.h (on va dire: a.cpp), le préprocesseur donnera un truc de ce genre:
    Code C++ : 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
    //A.h
    #define H_A
     
    //Avant B.h
    //B.h
    #define H_B
     
    //Avant A.h
    //A.h
    //Apres A.h
     
    class CB
    {
    	CA *pa; //ERREUR: CA inconnu
    };
     
    //Apres B.h
     
    class CA
    {
    	CB *pb;
    };
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #23
    Membre éprouvé
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Par défaut
    Avant d'avoir mis des gardes j'avais des
    et l'erreur était présente.

    Ce qui m'amène à la question : y a-t-il une différence entre les 2 méthodes ?

  4. #24
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    À propos du problème tel que je te le montre? je ne crois pas.
    Pour des trucs plus complexes, il peut y avoir une différence.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #25
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Est ce que par hasard (enfin par malchance plutôt), tes gardes n'entreraient pas en conflit avec d'autres gardes (système, autre projet, librairie tierces, ...)
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  6. #26
    Membre émérite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par défaut
    Bonsoir,
    Si tu as vraiment besoin d'aide tu dois dévoiler une partie de ton code

    1 ière le header qui contient la ligne de l'erreur (tout le header)
    2 ième le header qui contient la déclaration de ta CNoteDlg (tout le header)
    3 ième le cpp qui provoque l'erreur de compilation et qui inclut ces headers. ( juste la partie des includes)

  7. #27
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 35
    Par défaut
    En reprenant l'exemple de Medinoc, la solution contre les inclusions circulaires est la déclarations forward :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //A.h
    #ifndef H_A
    #define H_A
     
    class B;
     
    class CA
    {
    	B* pb;
    };
    #end if
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //B.h
    #ifndef H_B
    #define H_B
     
    class A;
     
    class CB
    {
    	A* pa;
    };
    #end if
    Il reste alors à inclure A.h et B.h dans les .cpp

    A propos de la différence entre #pragma once et les #define..., il me semble que le problème viens du faite que #pragma once n'est pas compatible avec tous les compilateurs (http://en.wikipedia.org/wiki/Pragma_once).

  8. #28
    Membre éprouvé
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Par défaut
    J'ai réalisé les déclarations forward au niveau de la classe qui inclue CNoteDlg et le problème semble être résolu.

    Merci à tous pour le soutien.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. runtime error 3075 syntax error (comma)
    Par pra3t0r dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 14/06/2011, 13h56
  2. Réponses: 2
    Dernier message: 05/10/2009, 16h43
  3. error near "(" :syntax error
    Par elekis dans le forum SQLite
    Réponses: 1
    Dernier message: 26/09/2008, 23h37
  4. Réponses: 7
    Dernier message: 18/03/2008, 17h58
  5. Réponses: 14
    Dernier message: 11/07/2006, 16h11

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