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 :

fonction amie d'une classe déclarée dans un autre fichier source


Sujet :

C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 421
    Points : 95
    Points
    95
    Par défaut fonction amie d'une classe déclarée dans un autre fichier source
    Bonjour à tous,

    Après avoir codé une classe shape, j'ai écrit dans un autre fichier source des fonctions qui permettent d'afficher ces shapes. Je souhaiterai qu'il y ait un lien d'amitié entre les fonctions d'affichage et la classe shape.

    J'ai donc fait la chose suivante :
    -shape.hh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #include "plot.hh"
     
    class Shape
    {
       ....
      friend void plot( Shape const& s);
      ....
    };
    -plot.hh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    class Shape;
     
    void plot(Shape const& s);
    -plot.cc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #include "plot.hh"
     
    void plot(Shape const& s)
    {
    ...
    }
    malgré le fait que dans plot.hh j'ai déclaré la classe Shape j'obtiens comme message d'erreur : invalid use of incomplete type ‘const struct Shape’.
    Ce message est du au fait que j'utilise dans la fonction plot un acces direct aux attributs de s. Pourtant ma fonction plot est amie à la classe shape.

    Pouvez-vous m'aidez svp ?

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Bonjour,

    Tu as oublié d'include Shappe.hh dans Plot.cc
    Tu n'as fait que déclarer la classe Shappe dans Plot.hh mais tu ne l'a pas défini.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 176
    Points : 258
    Points
    258
    Par défaut
    Je pense que ça marchera si tu fais #include shape.h dans ton plot.cc

    Edit : pffff grillé par neckara... Cela dit je pense qu il vaut mieux l inclure dans le cc. Ça évitera l inclusion cyclique.

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Citation Envoyé par GeantVert13 Voir le message
    Je pense que ça marchera si tu fais #include shape.h dans ton plot.cc

    Edit : pffff grillé par neckara... Cela dit je pense qu il vaut mieux l inclure dans le cc. Ça évitera l inclusion cyclique.
    En effet je me suis trompé en écrivant
    Je corrige cela tout de suite.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 421
    Points : 95
    Points
    95
    Par défaut
    J'ai testé l'inclusion de l'header plot.h dans shape.cc mais j'ai toujours le même message d'erreur.

  6. #6
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Citation Envoyé par takout Voir le message
    J'ai testé l'inclusion de l'header plot.h dans shape.cc mais j'ai toujours le même message d'erreur.
    Peux-tu nous montrer la ligne de l'erreur ?

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 176
    Points : 258
    Points
    258
    Par défaut
    Citation Envoyé par takout Voir le message
    J'ai testé l'inclusion de l'header plot.h dans shape.cc mais j'ai toujours le même message d'erreur.
    Hmmm relis les réponses. C shape.h qu il faut inclure dans plot.cc

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 421
    Points : 95
    Points
    95
    Par défaut
    Euh oui dsl c'est bien shape.h que j'ai mis dans plot.c.

    voici le message d'erreur en entier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Shapes/source/plot.cc: In function ‘void plot(const Shape&, int, bool)’:
    /Shapes/source/plot.cc:8:5: erreur: invalid use of incomplete type ‘const struct Shape’
    compilation terminated due to -Wfatal-errors.
    j'ai mis un namespace dans Shape.cc et Shape.hh serait ce la cause de mon problème ?

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 176
    Points : 258
    Points
    258
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Peux-tu nous montrer la ligne de l'erreur ?
    Ainsi que le code complet. Pour voir ou tu en es.

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 421
    Points : 95
    Points
    95
    Par défaut
    Le code complet ça sera difficile car j'utilise beaucoup de méthode et de librairies. J'ai simplifié pour que vous puissiez comprendre mon problème.

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 176
    Points : 258
    Points
    258
    Par défaut
    Citation Envoyé par takout Voir le message
    Euh oui dsl c'est bien shape.h que j'ai mis dans plot.c.

    voici le message d'erreur en entier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Shapes/source/plot.cc: In function ‘void plot(const Shape&, int, bool)’:
    /Shapes/source/plot.cc:8:5: erreur: invalid use of incomplete type ‘const struct Shape’
    compilation terminated due to -Wfatal-errors.
    j'ai mis un namespace dans Shape.cc et Shape.hh serait ce la cause de mon problème ?
    Ça dépend si plot est dans le même namespace c est bon. Sinon il faut spécifier avec using namespace tonNS; ou utiliser tonNS::Shape quand tu veux acceder à ta classe shape

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 421
    Points : 95
    Points
    95
    Par défaut
    Merci pour votre aide, c'est le namespace qui causait le message d'erreur.

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 421
    Points : 95
    Points
    95
    Par défaut
    J'aurais une autre question, pour protéger des inclusions cycliques il ne suffit pas de mettre les directives de preprocessing #ifndef ... , #define ..., #endif dans le header ?

  14. #14
    Membre actif
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 176
    Points : 258
    Points
    258
    Par défaut
    Citation Envoyé par takout Voir le message
    J'aurais une autre question, pour protéger des inclusions cycliques il ne suffit pas de mettre les directives de preprocessing #ifndef ... , #define ..., #endif dans le header ?
    oui, ça protègera des inclusions cycliques mais il n'y en avait pas dans ton code. De plus, si tu peux éviter des include, autant le faire, ça peut faire gagner du temps de compilation (en utilisant ls forward declaration)

Discussions similaires

  1. [cls et Vbs]réutilisation d'une classe écrite dans un autre fichier
    Par EvaristeGaloisBis dans le forum VBScript
    Réponses: 0
    Dernier message: 20/02/2015, 15h03
  2. fonction amie d'une classe
    Par switch1 dans le forum Langage
    Réponses: 5
    Dernier message: 25/05/2009, 02h13
  3. Réponses: 6
    Dernier message: 30/03/2009, 18h13
  4. [PHP 5.0] appel d'une variable global dans un autre fichier à partir d'une classe
    Par andry.aime dans le forum Langage
    Réponses: 1
    Dernier message: 13/01/2009, 09h31
  5. accéder à une variable déclarée dans un autre fichier
    Par sg.forums dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 31/10/2006, 09h20

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