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 :

comment utiliser une méthode statique dans une méthode d'une autre classe?


Sujet :

C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 2
    Points : 3
    Points
    3
    Par défaut comment utiliser une méthode statique dans une méthode d'une autre classe?
    Bonjour a tous,

    Voici mon problème :
    Dans ma bibliothèque "sylib.h":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #...
    class menu {
    public: 
    static void entete(void);
    static void menu1(void);
    }
    class tube {
    public:
    void montrer_tube(void);
    private:
    //données tube
    }
    Dans "menu.cpp":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    inline void menu::entete()
    { // mon entete }
    void menu::menu1()
    {
    menu::entete(); //ne pose aucun problème
    //contenu menu1
    ...
    }
    Dans "tube.cpp":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void tube::montrer_tube()
    {
    menu::entete(); //Error : Unresolved external...
    //affichage des careactéristiques du tube
    ...
    }
    J'ai défini chaque fonctions dans exactement un fichiers source (tube.cpp pour la classe tube et menu.cpp pour la classe
    menu) (cf faq c++).
    J'ai essayé de sortir entete de la classe menu ( void entete(void); ) et de définir normalement dans menu.cpp :
    void entete void()
    {...}
    mais j'ai toujours la meme erreur:
    *)
    Dans "tube.cpp":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void tube::montrer_tube()
    {
    entete(); //Error : Unresolved external...
    //affichage des careactéristiques du tube
    ...
    }
    J'ai lu : "Attention, les fonctions static sont des fonctions dont la portée n'est que dans le fichiers où elles se trouvent." et en effet je ne peux utiliser menu::entete(); que dans menu.cpp où elle est définie.
    Mais ça devrait être différent pour la simple fonction entete(); ( cf *) ).
    Je ne peux pas non plus appeller dans l'ordre
    tube mon_tube
    menu::entete(); //ou entete();
    mon_tube.montrer_tube();
    dans mon programme principal.

    Je voudrais afficher l'entete avant d'afficher le tube, mais je n'y arrive pas et je tourne en rond.
    Il doit y avoir une astuce simple, pourriez vous me dire comment faire svp?

  2. #2
    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
    J'ai lu : "Attention, les fonctions static sont des fonctions dont la portée n'est que dans le fichiers où elles se trouvent."
    En parlant des fonctions libres, pas des fonctions membres. Une fonction membre statique n'a rien à voir, et sera bien entendu utilisable partout où elle est déclarée.

    Sinon pour ton problème, essaye en retirant ce inline qui n'a aucun sens (pour inliner une fonction, le compilo doit avoir son implémentation, donc en la mettant dans un .cpp tu l'en empêches -- même combat que les templates).

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Merci, ça fonctionne sans le inline.
    Comme cette fonction est utilisée très souvent dans le programme, je pensais que ça gagnerait du temps en évitant l'appel de fonction, je n'orientais pas mes recherches du bon côté.

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

Discussions similaires

  1. Comment utiliser des méthodes d'un jar dans une JSP ?
    Par utopman dans le forum Servlets/JSP
    Réponses: 9
    Dernier message: 26/06/2012, 22h01
  2. Réponses: 14
    Dernier message: 10/07/2008, 11h56
  3. Réponses: 2
    Dernier message: 05/07/2008, 09h54
  4. Réponses: 1
    Dernier message: 07/05/2008, 11h42
  5. Réponses: 1
    Dernier message: 22/11/2007, 22h52

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