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 :

ordre de déclaration des class et relation d'amitié


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique

    Informations forums :
    Inscription : Février 2004
    Messages : 35
    Points : 36
    Points
    36
    Par défaut ordre de déclaration des class et relation d'amitié
    Salut à tous, j'ai un bête problème de compilation:
    Voila j'ai deux classes, BMULog et BMUMowerLog qui utilise BMULog (mais ne doit pas en dérivé). J'ai une méthode de lecture dans un fichier définit en private dans BMULog dont je voudrait que BMUMowerLog ait accès donc je déclare la fonction BMUMowerLog::ReadFromFile amis de BMULog::ReadFromFile et donc je suis obligé de déclarer BMULog après BMUMowerLog. Mais dès lors le compilateur râle un peu car il ne sais pas ce qu'est BMULog dans la déclaration de BMUMowerLog.
    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
     
    class BMUMowerLog
    {
            public:
            std::string OwnerName;
            std::string OwnerSurname;
            std::string OwnerAddress;
            unsigned __int8  MowerType;
            std::map<BMULogTime,BMULog> Data; // Problème ICI car ne connait pas BMULog!!
            bool Insert(const BMULogTime &,const BMULog &);
            bool Insert(const BMULog &);
            bool SaveToFile(std::string);
            bool ReadFromFile(std::string);
            unsigned __int16 Count();
            BMULog* operator[](const BMULogTime&);
     
     
    };
    //---------------------------------------------------------------------------
    class BMULog : public BMUSerialDump
    {       private:
            bool ReadFromFile(std::ifstream&); // Doit être accessible par BMUMowerLog::ReadFromFile
            public:
            unsigned __int32 SNB;
            unsigned __int8  BootVersion;
            unsigned __int32 SoftVersion;
            BMULogTime Time;
            std::string LogInformation;    
            BMULog();
            BMULog(unsigned __int8*,unsigned __int16);
            BMULog(unsigned __int8*,unsigned __int16,std::string);
            unsigned __int32 Size();
            friend bool BMUMowerLog::ReadFromFile(std::string); 
     
    };
    Comment indiqué au compilateur (C++ Builder 6) qu'il trouvera la déclaration de BMULog après??

    Merci

  2. #2
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 150
    Points : 180
    Points
    180
    Par défaut
    avant ton BUMowerLog :


  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 11
    Points : 14
    Points
    14
    Par défaut
    je mettrais pluto extern class BULog;

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Non non. La déclaration anticipée ça ne marche que lorsque le compilo n'a pas à connaitre la définition de la classe. Là il en a besoin, pour "localiser" la fonction en question.

    A priori il n'y a pas de solution triviale, il faudra soit donner un accès publique à ta fonction, soit passer par des moyens dérivés.

  5. #5
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    J'aurais tendance à jouer avec des classes imbriquée:
    - soit pour faire de l'une des deux une sous classe de l'autre. Genre la première.
    - soit pour rajouter une couche pimpl (http://www.gotw.ca/gotw -> google "pimpl & gotw") dans le ower. Mais il est vrai qu'il est peu adapté à cela dans la mesure où tout ces membres sont publics

    PS: inutile de nous donner tout ton code. Même pas 10 lignes nous interessent ici.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Août 2003
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 247
    Points : 276
    Points
    276
    Par défaut
    Quand les définitions croisée commence à posser de sérieux ennuis (et c'est el cas ici), on diagnostique généralement une mauvaise conception ;-).

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/11/2010, 18h07
  2. question sur la déclaration des classes
    Par nina08 dans le forum Qt
    Réponses: 2
    Dernier message: 06/07/2008, 12h43
  3. Déclaration des classes en XAML
    Par nitrodeath dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 07/01/2008, 21h36
  4. [weblogic 6][ejb]Ordre de chargement des classes
    Par Tistou07 dans le forum Weblogic
    Réponses: 1
    Dernier message: 14/02/2007, 10h14
  5. [DB2] Ordre de déclaration des variables
    Par Fatah93 dans le forum DB2
    Réponses: 1
    Dernier message: 04/05/2005, 17h18

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