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 :

Erreurs invraissemblables de la part de Visual C++


Sujet :

Visual C++

  1. #1
    Membre confirm�
    Homme Profil pro
    PHP + JAVA
    Inscrit en
    Mars 2009
    Messages
    65
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 35
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : PHP + JAVA

    Informations forums :
    Inscription : Mars 2009
    Messages : 65
    Par d�faut Erreurs invraissemblables de la part de Visual C++
    Bonjour � tous, je pense que quasiment tout est dit dans le titre. Voil� j'ai de gros probl�mes pour la g�n�ration (clique droit sur mon projet et g�n�rer) de mon programme en C++ avec l'IDE Visual C++.
    Voici par exemple une d�claration de .h dans lequel il me sort des erreurs compl�tement absurdes:
    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
     
    #include "stdafx.h"
     
    using namespace std;
     
    #ifndef GRAPHES_H_
    #define GRAPHES_H_
     
    class Graphes {
    public:
        string nom_graphe;
        vector<Sommets*> sommets;
        vector<Aretes*> aretes;
        static int num;
    //.......................................................
        Graphes();
        Graphes(string,vector<Sommets*>,vector<Aretes*>);
        string toString();
        void createSommet();
        void createArete(Sommets*,Sommets*);
        void addArete(Aretes);
        void addArete(Aretes*,Sommets*,Sommets*);
        void addSommet(Sommets*,Aretes*);
        void addSommet(Sommets*);
        Aretes* deleteArete(Aretes*);
        Sommets* deleteSommet(Sommets*);
        virtual ~Graphes();
    protected:
        string listeSommets();
        string listeAretes();
    private:
        int rechercheSommet(Sommets*);
        int rechercheArete(Aretes*);
    };
     
    #endif /* GRAPHES_H_ */
    et dans mon fichier stdafx.h comme il est conseill� par l'IDE il y a tous mes includes dont j'ai besoin:
    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
     
    // stdafx.h : fichier Include pour les fichiers Include système standard,
    // ou les fichiers Include spécifiques aux projets qui sont utilisés fréquemment,
    // et sont rarement modifiés
    //
     
    #pragma once
     
    #include "targetver.h"
     
    #include <iostream>
    #include <string>
    #include <vector>
     
    #include "Graphes.h"
    #include "Aretes.h"
    #include "Sommets.h"
    #include "Molecules.h"
    #include "Liaisons.h"
    #include "Atomes.h"
     
     
    // TODO: faites référence ici aux en-têtes supplémentaires nécessaires au programme
    Voici un floril�ge des erreurs qu'il me sort:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
    1>c:\users\duplouy\documents\visual studio 2012\projects\lotsc\graphes.h(17): error C2065: 'Sommets' : identificateur non déclaré
    1>c:\users\duplouy\documents\visual studio 2012\projects\lotsc\graphes.h(17): error C2059: erreur de syntaxe : '>'
    1>c:\users\duplouy\documents\visual studio 2012\projects\lotsc\graphes.h(18): error C2065: 'Aretes' : identificateur non déclaré
    1>c:\users\duplouy\documents\visual studio 2012\projects\lotsc\graphes.h(18): error C2059: erreur de syntaxe : '>'
    1>c:\users\duplouy\documents\visual studio 2012\projects\lotsc\graphes.h(22): error C2065: 'Sommets' : identificateur non déclaré
    1>c:\users\duplouy\documents\visual studio 2012\projects\lotsc\graphes.h(22): error C2059: erreur de syntaxe : '>'
    J'ai eu beau regard� des dizaines de fois (et cela fais plusieurs semaines), je n'ai pas vu une once des erreurs qu'il m�annon�ait. Pourriez-vous me dire d'o� cela pourrait venir?
    Pour information suppl�mentaire je d�veloppe sous Windows 8 avec Visual Studio Premium 2012.

  2. #2
    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
    Je pense que tu as une erreur dans l'ordre de tes inclusions.

    dans le stdafx.h, graph.h est inclus en 1er puis ensuite aretes.h, sommet.h etc.

    Or graph.h a besoin de savoir ce qu'est un sommet ou une ar�te (dans le prototype du constructeur par exemple.

    Il faudrait mettre aretes.h et sommet.h avant graph.h dans ton stdafx.h

    et m�me mieux, inclure aretes.h et sommet.h dans graph.h directement de fa�on � rendre graph.h auto-suffisant.

    Un d�veloppeur qui utilise graph.h n'a pas besoin de savoir qu'il faut inclure avant arete.h et sommet.h ni dans quel ordre.
    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
    .

  3. #3
    Membre confirm�
    Homme Profil pro
    PHP + JAVA
    Inscrit en
    Mars 2009
    Messages
    65
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 35
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : PHP + JAVA

    Informations forums :
    Inscription : Mars 2009
    Messages : 65
    Par d�faut
    Oui mais justement je me suis servis du stdafx.h en croyant que l'ordre ne comptait pas (comme vous le d�tes si justement). Car en r�alit� mes trois classes (Graphes,Aretes,et Sommets) s'utilisent mutuellement. C'est � dire que Graphes (comme vous pouvez le voir dans le code que j'ai fournit) a une collection de Sommets et d'Aretes. Sommets poss�de lui le graphe dans lequel il est plus une collection d'Aretes. Et enfin Aretes, poss�de le graphe dans lequel il est plus les deux sommets qui la constituent.
    J'avais essay� au d�part d'inclure de fa�on normale mes .h mais Visual Studio me disais �videmment que par exemple Graphes s'incluait lui m�me. C'est pour cela que je suis pass� par l'inclusion de mes .h dans stdafx.h (probl�me du serpent qui mord sa queue).
    Que pouvez-vous me conseillez pour me sortir de ce mauvais pas?
    Merci quand m�me pour la r�ponse qui r�sout certaines erreurs mais �videmment en font appara�tre d'autres ailleurs, puisque mes classes s'utilisent mutuellement.

  4. #4
    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
    Tout d'abord, tous tes include doivent �tre prot�g�s, tu l'as fait avec Graph.h, v�rifie sur les autres :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    #ifndef GRAPHES_H_
    #define GRAPHES_H_
     
    ...
     
    #endif //#ifndef GRAPHES_H_
    Ensuite, dans ton cas, tu as un probl�me de d�finition "r�cursives" (je ne sais pas si c'est le bon mot) et il faut aider le compilateur avec une d�claration anticip�e en disant au compilateur que la classe que tu utilises est connue mais sera d�finie plus tard.

    Ainsi dans ton code, cela donnerait :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ...
    class Sommets;  // déclaration anticipée
    class Aretes;  // déclaration anticipée
     
    class Graphes {
    public:
        string nom_graphe;
        vector<Sommets*> sommets;
        vector<Aretes*> aretes;
    ...
    };
    Cela ne fonctionne que parce que tu n'as pas besoin de connaitre la classe Aretes (ou Sommet) totalement vu que tu n'utilises que des pointeurs (ou des r�f�rences ce qui est presque pareil vu du compilateur). Quelle que soit la classe, un pointeur fait 4 octets (ou 2 ou 8 suivant le mod�le de compilation). Tu indiques juste qu'elle existe et qu'elle sera d�finie plus tard.
    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
    .

  5. #5
    Membre confirm�
    Homme Profil pro
    PHP + JAVA
    Inscrit en
    Mars 2009
    Messages
    65
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 35
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : PHP + JAVA

    Informations forums :
    Inscription : Mars 2009
    Messages : 65
    Par d�faut
    Alors j'ai v�rifi� et fais ce que tu m'as dit. On va dire que �a r�sout une grande partie du probl�me que j'ai (et merci pour cette aide si rapide). Mais Visual Studio me donne toujours des erreurs � s'arracher les cheveux.
    Quand je g�n�re mon projet il n'y a plus les erreurs dont j'ai parl� (c'est d�j� �a ) mais il me donne les erreurs suivantes:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    1>c:\users\duplouy\documents\visual studio 2012\projects\lotsc\graphes.cpp(8): warning C4627: '#include "Graphes.h"' : ignoré lors de la recherche d'une utilisation d'un en-tête précompilé
    1>          Ajoutez la directive à 'stdafx.h' ou régénérez l'en-tête précompilé
    Alors qu'il faut l'inclusion Graphes.h dans Graphes.cpp (warning compl�tement absurde). Et j'ai rajout� l'inclusion stdafx.h �a n'a rien fait de plus (j'ai nettoy� stdafx.h de tous les includes que j'avais fait). Enfin bref...
    Mais pire encore lors de la g�n�ration Visual Studio p�te litt�ralement les plons lorsqu'il regarde mes .cpp. Un petit floril�ge d'erreurs va certainement vous convaincre:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    1>c:\users\duplouy\documents\visual studio 2012\projects\lotsc\graphes.cpp(13): error C2653: 'Graphes' : n'est pas un nom de classe ni d'espace de noms
    1>c:\users\duplouy\documents\visual studio 2012\projects\lotsc\graphes.cpp(13): error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque : C++ ne prend pas en charge int par défaut
    1>c:\users\duplouy\documents\visual studio 2012\projects\lotsc\graphes.cpp(14): error C2065: 'num' : identificateur non déclaré
    1>c:\users\duplouy\documents\visual studio 2012\projects\lotsc\graphes.cpp(15): error C2065: 'nom_graphe' : identificateur non déclaré
    1>c:\users\duplouy\documents\visual studio 2012\projects\lotsc\graphes.cpp(15): error C2065: 'num' : identificateur non déclaré
    Alors que pourtant j'ai bien fait mes includes pour qu'il prenne en compte ma classe et ses attributs:
    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
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
     
    #include "Graphes.h"
    #include "Sommets.h"
    #include "Aretes.h"
    #include "stdafx.h"
     
    Graphes::Graphes() {
        num++;
        nom_graphe="G"+num;
    }
     
    Graphes::Graphes(string p_nom,vector<Sommets*> p_sommets,vector<Aretes*> p_aretes){
        nom_graphe=p_nom;
        sommets=p_sommets;
        aretes=p_aretes;
    }
     
    string Graphes::listeSommets(){
        if (sommets.size()==0){
            return "aucun sommet";
        }else{
            string ret="";
            for (int i=0;i<sommets.size();i++){
                ret+=sommets.at(i)->toString()+"\n";
            }
            return ret;
        }
    }
     
    string Graphes::listeAretes(){
            if (aretes.size()==0){
                return "aucune arêtes";
            }else{
                string ret="";
                for (int i=0;i<aretes.size();i++){
                    ret+=aretes.at(i)->toString()+"\n";
                }
                return ret;
            }
        }
     
    void Graphes::createSommet(){
        Sommets* s=new Sommets();
        addSommet(s);
    }
     
    void Graphes::createArete(Sommets* p_somm1,Sommets* p_somm2){
        Aretes* a=new Aretes();
        addArete(a,p_somm1,p_somm2);
    }
     
     
    void Graphes::addArete(Aretes* p_arete,Sommets* p_somm1,Sommets* p_somm2){
        if (p_arete->getArete_dans()==NULL){
            p_arete->setArete_dans(this);
        }
        p_arete->setSommets(p_somm1, p_somm2);
        p_somm1->setSommet_dans(this);
        p_somm2->setSommet_dans(this);
        p_somm1->addArete(p_arete);
        p_somm2->addArete(p_arete);
        //on ajoute l'arête dans le graphe
        aretes.push_back(p_arete);
        //on ajoute les sommets dans le graphe
        sommets.push_back(p_somm1);
        sommets.push_back(p_somm2);
    }
     
    void Graphes::addSommet(Sommets* p_sommets,Aretes* p_aret) {
        if (p_sommets->getSommet_dans()==NULL){
            p_sommets->setSommet_dans(this);
        }
        p_sommets->addArete(p_aret);
        sommets.push_back(p_sommets);
    }
     
    void Graphes::addSommet(Sommets* p_sommets) {
        if (p_sommets->getSommet_dans()==NULL){
            p_sommets->setSommet_dans(this);
        }
        sommets.push_back(p_sommets);
    }
     
    Aretes* Graphes::deleteArete(Aretes* p_arete){
        int rech=rechercheArete(p_arete);
        if (rech!=-1){
            aretes.erase(aretes.begin()+rech);
            //l'arête ne référence plus le graphe
            p_arete->setArete_dans(NULL);
            //l'arête ne référence plus ses deux sommets
            p_arete->setSommets(NULL, NULL);
            return p_arete;
        }else{
            return NULL;
        }
    }
     
    int Graphes::rechercheArete(Aretes* p_arete){
        int i=0;
        while (i<aretes.size() && strcmp(aretes.at(i)->nom_arete.c_str(),p_arete->nom_arete.c_str())!=0){
            i++;
        }
        if (i<aretes.size()){
            return i;
        }else{
            return -1;
        }
    }
     
    Sommets* Graphes::deleteSommet(Sommets* p_sommet){
        int rech=rechercheSommet(p_sommet);
        if (rech!=-1){
            sommets.erase(sommets.begin()+rech);
            p_sommet->setSommet_dans(NULL);
            //le sommet ne référence plus le graphe
            //il faut maintenant supprimer toutes les aretes incidentes
            //du graphe
            vector<Aretes*>::iterator i = p_sommet->aret_incidents.begin();
            while (i!=p_sommet->aret_incidents.end()){
                deleteArete(*i);
                i++;
            }
            return p_sommet;
        }else{
            return NULL;
        }
    }
     
    int Graphes::rechercheSommet(Sommets* p_sommet){
        int i=0;
        while (i<sommets.size() && strcmp(sommets.at(i)->nom_sommet.c_str(),p_sommet->nom_sommet.c_str())!=0){
            i++;
        }
        if (i<sommets.size()){
            return i;
        }else{
            return -1;
        }
    }
     
    Graphes::~Graphes() {
        // TODO Auto-generated destructor stub
    }

  6. #6
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    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 397
    Par d�faut
    Normalement, tu n'es pas cens� mettre les includes du projet dans stdafx.h, seulement ceux du syst�me et des biblioth�ques.

    Ensuite, stdafx.h doit �tre le premier header inclus, car tout ce qui le pr�c�de est ignor� par le compilo (c'est comme �a les precompiled headers!)
    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.

  7. #7
    Membre confirm�
    Homme Profil pro
    PHP + JAVA
    Inscrit en
    Mars 2009
    Messages
    65
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 35
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : PHP + JAVA

    Informations forums :
    Inscription : Mars 2009
    Messages : 65
    Par d�faut Erreurs enfin r�solues
    Merci pour tous vos conseils et remarques. Effectivement le fameux stdafx.h doit �tre mis au d�but encore fallait-il le savoir. J'en ai profit� pour appliquer le conseil que tu m'as donn�:
    tu n'es pas cens� mettre les includes du projet dans stdafx.h, seulement ceux du syst�me et des biblioth�ques.
    . Ce qui est beaucoup plus pratique pour la suite. Apr�s avoir g�n�r� j'ai eu des erreurs de links. Avec pas mal de patience j'ai r�ussi � tous les r�soudre. A priori il aime pas la d�claration:
    (plut�t bizarre...)
    Il m'a fait une erreur de lien dessus. Enfin bref, je me suis d�brouill� pour qu'il n'y ai plus aucune erreur ni de syntaxe ni de lien.
    Merci � tous pour vos r�ponses. Je mets ce sujet en r�solu en esp�rant qu'il pourra servir pour la suite...

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Erreurs lors de l'installation de Visual Editor 1.4.0
    Par mesrine dans le forum Eclipse Java
    R�ponses: 0
    Dernier message: 05/11/2009, 01h24
  2. erreur de link au passage de visual studio 2005 vers 2008
    Par blueLight dans le forum Visual C++
    R�ponses: 2
    Dernier message: 21/04/2008, 15h02
  3. Erreur : More than one part (Document/literal)
    Par ahulane dans le forum Services Web
    R�ponses: 4
    Dernier message: 06/08/2007, 09h11
  4. Erreur lors de l'ouverture de Visual Basic Editor
    Par snoopy69 dans le forum Access
    R�ponses: 8
    Dernier message: 09/05/2006, 11h39
  5. Une erreur venant de nullle part
    Par elaum dans le forum C
    R�ponses: 4
    Dernier message: 17/09/2005, 23h02

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