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 :

[POO] Accessibilite d'une fonction membre


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 309
    Par défaut [POO] Accessibilite d'une fonction membre
    Salut,

    J'ai une application console qui fonctionne et a laquelle je veux rajouter une couche graphique. L'application gere des evenements qui dependent des actions de l'utilisateur et des evenements qui en sont independants.

    Mon probleme se situe dans l'affichage des erreurs. Dans mon application console toutes les erreurs etaient traitees par la fonction independante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void print_error(std::string error)
    {
         std::cout << "ERREUR: " << error << std::endl;
    }
    Cette fonction etait accessible de n'importe qu'elle classe qui incluait le header adequat.

    Maintenant, j'utilise wxWidget et c'est un composant appartenant a la classe WX_FORM (responsable du graphisme) qui gere l'affichage des erreurs.

    Comment puis-je faire pour que ma fonction print_error() puisse acceder a une fonction membres de WX_FORM sachant qu'elle ne peut pas elle-meme declarer une classe WX_FORM ?

    Merci de m'apporter vos lumieres.

    PS : Mes excuses pour le sujet de ce post qui constitue une pietre description de mon probleme.
    Je m'excuse egalement aupres du moderateur qui devra peut-etre deplacer ce post dans un forum plus adapte (conception ? wxWidget ?). Je ne savais vraiment pas ou le mettre.

  2. #2
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    Tu peux faire une méthode publique statique de la classe graphique. Ainsi, toutes les classes de ton application pourront l'appeler et lui donner un message d'erreur à afficher (en tant qu'argument de la fonction).

    NB: Je pense que tu voulais parler des wxFrame, et non des WX_FORM.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 309
    Par défaut
    En fait, j'ai bien une classe WX_FORM mais, effectivement, elle derive de wxFrame.

    Il est donc temps que je me penche sur les fonctions statiques.

    Merci du conseil.

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Bonjour,
    Si tu passes en wxWidget, tu devrais regardé la doc sur wxLog qui offre pas mal de souplesse sur la redirection de ce type de message d'erreur.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 309
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    Bonjour,
    Si tu passes en wxWidget, tu devrais regardé la doc sur wxLog qui offre pas mal de souplesse sur la redirection de ce type de message d'erreur.
    J'ai regarde la description dans la doc mais apparement cette classe ecrit dans un fichier et ce n'est pas ce que je veux faire.

  6. #6
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    Pour un appel à une fonction statique, tu peux faire ça sans instancier la classe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void JAMBON::status(const wxString &sMessage)
    {
        WX_FORM::print_error(sMessage);
    }
    Citation Envoyé par Tymk Voir le message
    J'ai regarde la description dans la doc mais apparement cette classe ecrit dans un fichier et ce n'est pas ce que je veux faire.
    Pas seulement. Avec la fonction SetActiveTarget(), tu définis où vont être tracés tes appels à wxLogMessage() et autres. ça peut être certes un fichier, mais aussi un wxTextBox, un flux, la sorties standards, ...

  7. #7
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par Tymk Voir le message
    J'ai regarde la description dans la doc mais apparement cette classe ecrit dans un fichier et ce n'est pas ce que je veux faire.
    Bonjour,
    C'est un peu plus complet que ça:
    "
    • wxLogStderr This class logs messages to a FILE *, using stderr by default as its name suggests.
    • wxLogStream This class has the same functionality as wxLogStderr, but uses ostream and cerr instead of FILE * and stderr.
    • wxLogGui This is the standard log target for wxWidgets applications (it is used by default if you don't do anything) and provides the most reasonable handling of all types of messages for given platform.
    • wxLogWindow This log target provides a "log console" which collects all messages generated by the application and also passes them to the previous active log target. The log window frame has a menu allowing user to clear the log, close it completely or save all messages to file.
    • wxLogNull The last log class is quite particular: it doesn't do anything. The objects of this class may be instantiated to (temporarily) suppress output of wxLogXXX() functions. As an example, trying to open a non-existing file will usually provoke an error message, but if for some reasons it is unwanted, just use this construction:
    "
    Je te conseille de regarder un peu plus la doc wxWidget, car j'ai l'impression que tu cherche à réinventer la roue.

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 309
    Par défaut
    Citation Envoyé par spoutspout Voir le message
    Tu peux faire une méthode publique statique de la classe graphique. Ainsi, toutes les classes de ton application pourront l'appeler et lui donner un message d'erreur à afficher (en tant qu'argument de la fonction).
    J'ai regarde un peu comment fonctionnait la staticite. Mais, je ne suis pas sur que ca puisse me statisfaire.

    D'apres ce que j'ai compris, declarer un membre static permet de le rendre unique dans chacune des instances de la classe. Par extension, j'imagine que c'est la meme chose avec une methode static. Voila ce que je ferai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class WX_FORM : public wxFrame
    {
         public:
         WX_FROM();
         ~WX_FORM();
     
         static print_error(std::string msg);
         //plein d'autres methodes
    };
    Mais si je veux utiliser la fonction print_error() dans la classe JAMBON je suis quand meme obliger d'instancier une nouvelle classe WX_FORM :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    JAMBON::status()
    {
         WX_FORM new_app;
         new_app.print_error("ALERTE: quelqu'un a mange la derniere tranche !!!");
    }
    Cette instanciation va quand meme mettre en memoire plein d'objet qui ne servent a rien.

    Je commence a me demander si j'ai pas un probleme de strcuture avec mon programme.

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/04/2006, 13h02
  2. Réponses: 4
    Dernier message: 01/12/2005, 12h33
  3. Réponses: 3
    Dernier message: 28/11/2005, 12h15
  4. Réponses: 3
    Dernier message: 06/11/2005, 18h02
  5. Thread avec une fonction membre d'une classe
    Par SteelBox dans le forum Windows
    Réponses: 6
    Dernier message: 01/03/2004, 01h15

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