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 :

Problème d'appel d'une methode amie


Sujet :

C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 151
    Points : 83
    Points
    83
    Par défaut Problème d'appel d'une methode amie
    Bonjour,
    J'aimerais créer une classe stockant des tableaux et des méthodes de recherche dans ceux-ci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class Command_asm{
     
    	public:
    		// Tableaux
    		static string list_command[TAILLE_BASE];
    		static string list_command_jump[TAILLE_JMP]; 
    		static string list_command_X87[TAILLE_X87];
    		static string list_command_SSE[TAILLE_SSE];
     
    		friend bool is_present(string type, string word);
    };
    J'aimerais appelé la méthode is_present dans n'importe quelle classe par Command_asm::is_present("tableau", "chaine");
    Voici l'erreur à la compilation :
    core/src/Read_file.cpp:184: erreur: «is_present" is not a member of «Command_asm"

    Une idée ?
    Merci d'avance.

  2. #2
    Membre actif
    Profil pro
    Dev
    Inscrit en
    Décembre 2007
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Décembre 2007
    Messages : 191
    Points : 216
    Points
    216
    Par défaut
    Citation Envoyé par Anium Voir le message
    Bonjour,
    J'aimerais créer une classe stockant des tableaux et des méthodes de recherche dans ceux-ci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class Command_asm{
     
    	public:
    		// Tableaux
    		static string list_command[TAILLE_BASE];
    		static string list_command_jump[TAILLE_JMP]; 
    		static string list_command_X87[TAILLE_X87];
    		static string list_command_SSE[TAILLE_SSE];
     
    		friend bool is_present(string type, string word);
    };
    J'aimerais appelé la méthode is_present dans n'importe quelle classe par Command_asm::is_present("tableau", "chaine");
    Voici l'erreur à la compilation :
    core/src/Read_file.cpp:184: erreur: «is_present" is not a member of «Command_asm"

    Une idée ?
    Merci d'avance.
    comme le dit l'erreur, une fonction amie n'est pas membre de la classe, c'est is_present() et pas Commande_asm::is_present()

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 151
    Points : 83
    Points
    83
    Par défaut
    Merci pour la réponse.
    En essayant cette solution, j'obtiens le message d'erreur suivant :
    core/src/Organize_struct.cpp: In member function «void Organize_struct::organize()":
    core/src/Organize_struct.cpp:156: erreur: «is_present" was not declared in this scope

    L'inclusion est pourtant bien faite.

  4. #4
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    à quoi sert l'amitié pour des membres publiques ?

  5. #5
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 627
    Points : 30 692
    Points
    30 692
    Par défaut
    Salut,
    Citation Envoyé par Davidbrcz Voir le message
    à quoi sert l'amitié pour des membres publiques ?
    Je crois, en effet, que notre ami a quelques soucis en ce qui concerne l'amitié et la visibilité des membres et méthodes...

    Une petite "picure de rappel" ne lui fera sans doute pas de tord

    En fait, tout ce qui est de visibilité publique (autrement dit: tout ce qui se trouve entre les deux point du public: et le sélecteur de visibilité (protected: ou private: ) suivant) sera d'office accessible partout.

    L'amitié permet de faire de manière à ce qu'une classe (quelconque) puisse voir les éléments de visibilité restreinte (protected ou private) exactement comme s'ils avaient été déclaré en public...

    De prime abord, ici, étant donné que touts tes membres sont publics (ce qui n'est pas forcément une bonne chose), y compris la méthode is_present, il n'y a absolument aucun besoin de déclarer cette méthode avec une amitié

    Quand bien même, tu mettrais (ce serait déjà mieux) tous les membres en protégés, mais la seule méthode is_present en public, tu n'aurais pas plus de problèmes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class Command_asm
    {
     
        public:
            bool is_present(string type, string word);
        protected:
            static string list_command[TAILLE_BASE];
            static string list_command_jump[TAILLE_JMP]; 
            static string list_command_X87[TAILLE_X87];
            static string list_command_SSE[TAILLE_SSE];
    };
    parce que, de toutes manières, toutes les méthodes d'une classe peuvent accéder librement aux differents membres qui composent cette classe.

    Il faudrait, cependant, alors prévoir des comportements qui permettent de gérer les instructions, les sauts, les instructions x87 et les instructions SSE

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 151
    Points : 83
    Points
    83
    Par défaut
    Effectivement, merci pour le petit rappel.
    Ce dont j'avais besoin, c'était d'une méthode static.
    Ainsi, je peux l'appeler n'importe où par Command_asm::is_present(...) sans avoir à déclarer un objet Command_asm.

    Voici le code final :
    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
    class Command_asm{
     
    	public:
    		// Tableau stockant l'ensemble des instructions
    		//
    		static string list_command[TAILLE_BASE];
    		static string list_command_jump[TAILLE_JMP]; 
    		static string list_command_X87[TAILLE_X87];
    		static string list_command_SSE[TAILLE_SSE];
     
     
    		/**
                    * Determine si word est present dans l'un des tableaux d'instruction
                    * @param type dans quel tableau regarder (base, sse, x87)
                    * @param word mot à rechercher
                    * @return si word est present ou non
                    */
     
    		static bool is_present(string type, string word);
     
    };
    Merci pour vos réponses.

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

Discussions similaires

  1. problème dans l'appel d'une methode
    Par aishaDev dans le forum JSF
    Réponses: 12
    Dernier message: 28/06/2012, 12h00
  2. Réponses: 7
    Dernier message: 01/02/2008, 14h16
  3. forcer l'appel d une methode apres un repaint
    Par ceres02 dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 11/03/2006, 00h17
  4. [Language]problème lors de l'appel d'une méthode
    Par Samanta dans le forum Langage
    Réponses: 6
    Dernier message: 18/05/2005, 13h03
  5. [Reflection][Bean] Appel d'une méthode dynamiquement
    Par eraim dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 28/04/2004, 11h07

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