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 :

probleme avec les class


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 6
    Par défaut probleme avec les class
    bonjour à tous,

    je ne connais pas les us et coutumes du coin donc si je gaffe, veuillez m'en pardonner.

    voilà en gros mon probleme:

    je suis en train de creer(en fait, j'ai finit sauf que ça marche pas ) un programme qui sert à creer un annuaire.

    en gros, j'ai trois structure inmbriquée, une class carnet(l'annuaire), qui contient des éléments de la class famille et chaque famille contient des element de la class personne.

    le carnet est une liste doublement chainée de familles, la famille est une liste doublement chainée de personnes.

    bon jusqu'ici tout vas bien.

    le probleme c'est que quand je compile, j'ai le signal qui s'arrete sur le constructeur de la famille carnet et j'ai le message suivant:

    c:\documents and settings\wipf\mes documents\visual studio 2008\projects\carnet_famille_3\carnet_famille_3\famille3.cpp(9) : error C2653: 'carnet' : n'est pas un nom de classe ni d'espace de noms

    je n'ai aucune idée de l'origine du probleme, la class carnet m'a l'air bien definie, la fonction aussi...si quelqu'un a une idée...je suis preneur.

    autre question plus simple, quels include doit on utiliser et où doit-on les utiliser pour assurer le lien entre le cpp, le .h et le main?
    j'ai essayé pense que ce que j'ai fait colle mais...pas sur

    d'avance merci à tous ceux qui etudierons mon cas

  2. #2
    Membre éprouvé
    Inscrit en
    Avril 2008
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 155
    Par défaut
    Dans les "us", en général on poste des bout de code d'où on pense que vient le problème.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 6
    Par défaut
    ben pour le famille.h j'ai ceci(désolé pour longueur mais...comme j'ai créé toutes les classes...):
    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
     
    #ifndef FAMILLE_H
    #define FAMILLE_H
    #include <iostream>
    #include<string>
    #include "famille.cpp"
     
    class carnet{
     
        public:
            carnet();   
            bool avant(const string& nom,const string& nom2);    
            famille crt(string nom);    //    x
            void ajouter_famille(string nom, string adresse, string tel);    
            famille get_premiere_famille();    //    x
     
        private:
            famille*c_premier;
            famille*c_dernier;
     
    };
     
     
    class famille{
     
        public: 
            famille();  
            ~famille();  
            famille(string nom, string adresse, string tel);  
            void ajouter_personne(string prenom, string mail, string gsm);  
            void modifier_famille();  
            void afficher_famille();    
            personne get_premiere_personne();
     
        private:
            string f_nom;
            string f_adresse;
            string f_tel;
            personne*f_premier;
            personne*f_dernier;
            famille*f_suivant;
            famille*f_precedant;
            friend class carnet;
     
    };
     
    class personne{
     
        public:
            personne();  
            personne(string prenom, string mail, string gsm);  
            ~personne();  
            void modifier_personne();
            void afficher_personne();   
     
        private:
            string p_prenom;
            string p_mail;
            string p_gsm;
            personne*p_precedant;
            personne*p_suivant;
            friend class famille;
    };
     
    #endif
    j'ai declaré mon constructeur de la classe carnet comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    carnet::carnet(){
        c_premier=new famille();
        c_dernier=new famille();
        c_premier->f_suivant=c_dernier;
        c_dernier->f_precedant=c_premier;
    }

  4. #4
    Membre éprouvé
    Inscrit en
    Avril 2008
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 155
    Par défaut
    Bien déjà ptite info==> il y a des balises de code: le # pour encadrer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class carnet{
     
    public:
    carnet();
    bool avant(const string& nom,const string& nom2);
    famille crt(string nom); // x
    tu crée une famille avec un seul paramètre string

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class famille{
     
    public:
    famille();
    ~famille();
    famille(string nom, string adresse, string tel);
    ce constructeur n'est pas défini dans la classe famille ca vient peut etre de la ton soucis.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 6
    Par défaut
    Citation Envoyé par loicounet Voir le message

    tu crée une famille avec un seul paramètre string
    le "famille crt(string nom)" en fait n'est pas un constructeur au sens propre.

    les familles sont classées en ordre alpha, donc quand j'ajoute une nouvelle famille, il faut que je sache avant quelle famille (pré-existante dans le carnet) je peux la placer.

    cette fonction a pour role de parcourir le carnet et de m'envoyer la famille avant laquelle je vais pouvoir placer ma nouvelle famille.

    par contre tu souleves un point...est-ce que je devrais le declarer en pointeur de famille plutot qu'en famille?

  6. #6
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    si je puis me permettre: tu fais très compliqué alors que tu pourrais faire tellement simple. Ou alors, je n'ai pas tout compris.

    Par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    struct Personne
    {
            Personne( const string & prenom = "", const string & mail = "", const string & gsm = "");  
            ~Personne();  
            void modifier_personne();
            void afficher_personne();   
     
        private:
            string p_prenom;
            string p_mail;
            string p_gsm;
    };
    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
    class Famille{ 
        public: 
            Famille(const string & nom = "", const string & adresse = "", const string = tel = "");  
            ~Famille();  
            void ajouter_personne(const string & prenom, const string & mail, const string & gsm);  
            void modifier_famille();  
            void afficher_famille();    
            Personne * get_personne( size_t position ) { return ( f_personnes.size() >= position ) ? NULL : f_personnes[position]; )
     
        private:
            string f_nom;
            string f_adresse;
            string f_tel;
            vector<Personne> f_personnes;
    };
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class Carnet{
     
        public:
            Carnet();    
            famille crt(const string & nom);
            void ajouter_famille(const string & nom, const string & adresse, const string & tel);    
            Famille * get_famille( size_t position ) { return ( c_familles.size() >= position ) ? NULL : c_familles[position]; )
     
        private:
            vector<Famille> c_familles;
    };
    Ce que je veux dire, c'est que je ne comprend pas pourquoi tu utilises tous ces pointeurs. En c++, il faut éviter les pointeur si l'on peut, et il me semble qu'ici, on peut largement s'en passer. Non?

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 6
    Par défaut
    c'est-à-dire que c'est un travail pour l'université...on est sensé utiliser ce qu'on appris cette année(pointeurs, chaine doublement listée, class...etc)

    c'est sur que je m'embeterai moins avec des typedef, des struct et des vecteurs, mais le prof risque de pas apprecier....

    accessoirement ça me sert un peu de révision avant mes exams...mine de rien, me plonger dans ce programme m'aide beaucoup à organiser mes connaissance dans ma petite cervelle

    maintenant que j'utilise des pointeurs ou pas, il semble que le cpp n'identifie pas carnet comme une classe(enfin si j'ai bien compris le message d'erreur)...c'est surtout ça mon probleme

  8. #8
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par naifanshi Voir le message
    c'est-à-dire que c'est un travail pour l'université...on est sensé utiliser ce qu'on appris cette année(pointeurs, chaine doublement listée, class...etc)
    ok, je comprends.

    Citation Envoyé par naifanshi Voir le message
    maintenant que j'utilise des pointeurs ou pas, il semble que le cpp n'identifie pas carnet comme une classe(enfin si j'ai bien compris le message d'erreur)...c'est surtout ça mon probleme
    Et bien, si tu nous donnes le message d'erreur et la ligne à laquelle il s'applique, nous pourrons peut-être t'aider

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 6
    Par défaut
    ben j'en ai quelques-uns des message, mais le premier, je l'ai donné, dans le main(), je commence par creer un carnet vide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int main(){
     
    carnet *c= new carnet();    //création du carnet
    famille*g=new famille();    //création d'un pointeur de famille g
     
    g=c.get_premiere_famille(); //pointeur que je place sur la premiere 
                                           //famille du carnet
    personne*p=new personne();
    p=g.get_premiere_personne();//même chose, mais pour la premiere personne
    le message d'erreur est:

    c:\documents and settings\wipf\mes documents\visual studio 2008\projects\carnet_famille_3\carnet_famille_3\famille.cpp(7) : error C2653: 'carnet' : n'est pas un nom de classe ni d'espace de noms

    et il pointe dans le .cpp sur la premiere ligne de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    carnet::carnet(){
    c_premier=new famille();
    c_dernier=new famille();
    c_premier->f_suivant=c_dernier;
    c_dernier->f_precedant=c_premier;
    }

  10. #10
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    Il doit certainement te manquer l'inclusion de "famille.h" dans ton main.

    Sinon, dans famille.h, je vois:
    C'est bien évidemment l'inverse qu'il faut faire: le source (fichier .cpp) doit inclure l'en-tête (.h). Dans l'en-tête, on déclare les choses (classes, structures, fonctions, etc...), dans le fichier source on les définit (à quelques exceptions près.)

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 6
    Par défaut
    c'est-à-dire que j'avais procédé comme ça, mais j'ai encore plus d'erreur à ce moment là...


    maintenant, la premiere erreur est la suivante, le curseur s'arrete sur la fonction booléenne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class carnet{
     
    public:
    carnet();   //   x
    bool avant(const string& nom,const string& nom2);    //    x
    famille crt(string nom);    //    x
    void ajouter_famille(string nom, string adresse, string tel);    //    x
    famille get_premiere_famille();    //    x
     
    private:
    famille*c_premier;
    famille*c_dernier;
     
    };

    et j'ai le message d'erreur suivant:

    c:\documents and settings\wipf\mes documents\visual studio 2008\projects\carnet_famille_3\carnet_famille_3\famille.h(11) : 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

    qu'est-ce qui se passe? il reconnait pas mon constructeur? il veut le transformer en int?

  12. #12
    Membre éclairé Avatar de befalimpertinent
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Avril 2007
    Messages : 561
    Par défaut

    Il manque std:: devant tous les types string:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bool avant(const std::string& nom,const std::string& nom2);
    Procède ainsi dans ton .h et utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    using namespace std;
    string une_chaine;
    dans ton .cpp

    (cf pour plus d'info à ce sujet)

Discussions similaires

  1. JSF/JPA probleme avec les classes embedded
    Par sorown dans le forum JSF
    Réponses: 0
    Dernier message: 02/04/2014, 13h15
  2. probleme Avec les classes Abstraites
    Par thibaultc dans le forum C++/CLI
    Réponses: 3
    Dernier message: 02/12/2013, 10h58
  3. Probleme avec les Classes
    Par archipel dans le forum Flash
    Réponses: 7
    Dernier message: 16/05/2007, 14h57
  4. Probleme avec les classes friends
    Par Kerwando dans le forum C++
    Réponses: 4
    Dernier message: 27/10/2006, 23h29
  5. [POO] Problème avec les classes
    Par peypey dans le forum Langage
    Réponses: 8
    Dernier message: 03/05/2006, 15h05

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