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 avec une classe


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2011
    Messages : 14
    Par défaut Erreur avec une classe
    Salut à tous,

    Je suis étudiant en 1e année de DUT info et je dois réaliser un projet visant à reproduire une version simplifiée de Facebook en utilisant deux classes : une classe Personne et une classe Facebook. J'ai donc créé 4 fichiers : personne.h, personne.cpp, facebook.h et facebook.cpp. Un des attributs de ma classe Facebook est un tableau de Personnes contenant tous les inscrits. Afin de pouvoir travailler avec la classe Facebook dans la classe Personne, on me demande de faire une déclaration de la façon suivante dans mon fichier personne.h (chose que j'ai faite) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class Facebook ;
    class Personne{} ;
    Si je n'inclus pas le fichier facebook.h dans mon fichier personne.h, le compilateur m'indique que les attributs de la classe Facebook que j'utilise dans les méthodes de Personne ne sont pas déclarés.
    Mais si je fais cette déclaration, j'obtiens l'erreur suivante dans mon fichier facebook.h (ligne 12) : "error: 'Personne' does not name a type"
    Et là je ne sais plus quoi faire

    Voici des extraits de mes deux headers :

    personne.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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    #ifndef PERSONNE_H_INCLUDED
    #define PERSONNE_H_INCLUDED
     
    #include <string>
    #include "facebook.h" // l'inclusion maudite qui fait foirer la compilation
     
    using namespace std;
     
    class Facebook;
     
    class Personne
    {
        private :
     
            string nom;
            string prenom;
     
        public :
     
            ...
    };
     
    #endif // PERSONNE_H_INCLUDED

    facebook.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
    15
    16
    17
    18
    19
    20
    21
    22
    #ifndef FACEBOOK_H_INCLUDED
    #define FACEBOOK_H_INCLUDED
     
    #include "personne.h"
     
    const int MAXPERSONNES=100;
     
    class Facebook
    {
        private :
     
            Personne fb[MAXPERSONNES]; // c'est ici que j'obtiens mon erreur
            int tabId[MAXPERSONNES];
            int nbPers;
            bool tabRelation[MAXPERSONNES][MAXPERSONNES];
     
        public :
     
            ...
    };
     
    #endif // FACEBOOK_H_INCLUDED

    J'espère donc que vous pourrez m'aider à résoudre ce problème

    Merci d'avance !

  2. #2
    Membre Expert Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Par défaut
    Salut,

    À mon avis, c'est parce que tu inclus Personne.h avant d'inclure Facebook.h quelque part dans ton main. Et sinon tu peux toujours faire exactement la même chose pour la classe Facebook (vis-à-vis de Personne) que ce que tu fais dans Personne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class Personne;
     
    class Facebook
    {

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2011
    Messages : 14
    Par défaut
    Salut Trademark,

    Merci mais malheureusement l'erreur persiste

  4. #4
    Membre éclairé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par défaut
    La classe Facebook a besoin de la classe Personne car elle les repertorie, mais pourquoi Personne aurait besoin de Facebook?

    Cette dépendance circulaire ne me parait pas justifiée.

  5. #5
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    Dans personne.h, tu n’as pas besoin d’inclure facebook.h.

    La « forward-declaration » (class Facebook; ) devrait suffire.

    En revanche, tu vas l’inclure dans le .cpp pour pouvoir utiliser les méthodes de ta classe Facebook

  6. #6
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2011
    Messages : 14
    Par défaut
    Lorsque je met uniquement "class Facebook;" dans personne.h, le compilateur m'indique "error : 'attribut' was not declared in this scope" pour chaque attribut de Facebook que j'utilise dans les méthodes de Personne

  7. #7
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    Il faut que tu écrives le corps de tes méthodes dans le .cpp, pas dans le .h, qui contient seulement les déclarations (= l’interface).

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

Discussions similaires

  1. Erreur avec une classe
    Par 16gsyncro dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 02/05/2010, 12h40
  2. [POO] Erreur de syntaxe avec une classe
    Par sirbaldur dans le forum Langage
    Réponses: 5
    Dernier message: 10/01/2007, 13h30
  3. [C#][WebServices] Appel methode avec une classe en paramètre
    Par bran_noz dans le forum Windows Forms
    Réponses: 6
    Dernier message: 10/09/2004, 16h41
  4. [Débutant][Conception] Erreur avec une classe interne
    Par Devil Redneck dans le forum Général Java
    Réponses: 5
    Dernier message: 11/06/2004, 15h45
  5. [Thread] Erreur dans une classe interne
    Par totof2308 dans le forum Général Java
    Réponses: 5
    Dernier message: 03/06/2004, 08h15

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