Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2877 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Référence à une fonction d'une autre classe

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Référence à une fonction d'une autre classe

n°472722
haazheel
Posté le 31-07-2003 à 04:32:17  profilanswer
 

Salut tout le monde,
 
voici ma question:
 
J'ai la classe DATA suivante (largement simplifiée, mais le principe est là):
 

Code :
  1. struct DATA
  2. {
  3. public:
  4.         typedef map<AnsiString, int> ToutesActions;
  5.         const ToutesActions & m_TA() const { return this->TA; }
  6. private:
  7.         ToutesActions TA;
  8. };


 
Je dois accéder à TA depuis une autre classe, c'est donc la raison pour laquelle j'ai créé la fonction m_TA()
 
Est-ce que le code suivant est correct?
 

Code :
  1. DATA::ToutesActions & TA = A_D->m_TA();
  2. DATA::iterateur GO_E  = TA.find(Text);


 
Ce code fonctionne très bien, mais j'ai le warning suivant à la compilation:
 

Un temporaire a été utilisé pour initialiser 'TA'


 
Peut-être est-ce que je pars (encore) en vrille...
 
Merci d'avance!!


---------------
Another .Net Blog
mood
Publicité
Posté le 31-07-2003 à 04:32:17  profilanswer
 

n°472742
LetoII
Le dormeur doit se réveiller
Posté le 31-07-2003 à 08:47:00  profilanswer
 

C bizzard, j'ai déjà eu ce warning, mais je me souvient plus pkoi. T'aurais un peu plus de code autour de:
 

Code :
  1. DATA::ToutesActions & TA = A_D->m_TA();
  2. DATA::iterateur GO_E  = TA.find(Text);

 
 
?


---------------
Le Tyran
n°472768
Joel F
Real men use unique_ptr
Posté le 31-07-2003 à 09:19:30  profilanswer
 

sans vouloir fair ele lourd, il se pourrait aussi que tu doives revoir la conception objet de ton code.
Qu'a besoin de faire exactement les objets qui veulent accéder à TA ?
 
Ce code :
 

Code :
  1. DATA::ToutesActions & TA = A_D->m_TA();
  2. DATA::iterateur GO_E  = TA.find(Text);

 
 
pourrait etre remplacer par une methode find() de la classe DATA non ?
 

Code :
  1. class DATA
  2. {
  3. public:
  4.        typedef map<AnsiString, int> ToutesActions;
  5.        const ToutesActions & m_TA() const { return this->TA; }
  6.         iterateur find( char* text ) { return TA.find(text); }
  7. private:
  8.        ToutesActions TA;
  9. };

n°472812
Taz
bisounours-codeur
Posté le 31-07-2003 à 09:55:08  profilanswer
 

euh si tu renvoie un const &, ben tu peux avoir qu'une const &. pareil pour find, qui est une opération const et donc un const_iterator suffit

n°473204
haazheel
Posté le 31-07-2003 à 14:42:51  profilanswer
 

Joel F a écrit :

sans vouloir fair ele lourd, il se pourrait aussi que tu doives revoir la conception objet de ton code.
Qu'a besoin de faire exactement les objets qui veulent accéder à TA ?


 
La classe DATA permet de stocker dans des maps les données d'un fichier XML.
 
Voici ma déclaration de classe (avec uniquement ce qui nous intéresse):
 

Code :
  1. struct DATA
  2. {
  3. public:
  4.         //Contient la liste des frames pour une catégorie de stats
  5.         typedef vector<int> ListeFrames;
  6.         typedef ListeFrames::iterator ite_Frame;
  7.         //nom de la stat + liste des Frames
  8.         typedef map<AnsiString, ListeFrames> ActionsUneStat;
  9.         typedef ActionsUneStat::iterator ite_Stat;
  10.         //Nom du joueur + stats
  11.         typedef map<AnsiString, ActionsUneStat> ActionsJoueurs;
  12.         typedef ActionsJoueurs::iterator ite_Action_Joueur;
  13.         //Equipe + Joueurs
  14.         typedef map<AnsiString, ActionsJoueurs> ToutesActions;
  15.         typedef ToutesActions::iterator ite_Action_Equipe;
  16.         //Permet d'utiliser la map des stats
  17.         const ToutesActions & m_TA() const { return this->TA; }
  18. private :
  19.         ToutesActions TA;
  20. };


 
Une fois que je fais appel à DATA, je remplis la map TA avec toutes les informations nécessaires.
 
Dans une autre classe, disons ANALYSE, je dois utiliser les données contenues dans TA.
 
Voici comment je procéde (Début de l'algo):
 

Code :
  1. DATA A_D;
  2. //On trouve l'équipe
  3. DATA::ToutesActions & TA = A_D->m_TA();
  4. DATA::ite_Action_Equipe GO_E  = TA.find(ListeEquipes->Text);
  5. DATA::ActionsJoueurs & AJ = GO_E->second;
  6. DATA::ite_Action_Joueur Begin_Joueur = AJ.begin();
  7. DATA::ite_Action_Joueur End_Joueur = AJ.end();
  8. //.....


 
De même ensuite j'effectue une recherche avec find() dans la map AJ...
 
Je parcoure donc successivement les maps imbriquées les unes dans les autres.
 
Je ne sais donc pas si j'ai besoin de définir dans ma classe DATA des fonctions de recherche, etc...


---------------
Another .Net Blog
n°473219
Joel F
Real men use unique_ptr
Posté le 31-07-2003 à 14:47:18  profilanswer
 

Ca sera toujour splus propre que de faire ca ....
reflechis mieux a ton approche objet.

n°473222
VisualC++
J'va y penser ...
Posté le 31-07-2003 à 14:48:06  profilanswer
 

enfin objet avec des struct :ange:

n°473229
LetoII
Le dormeur doit se réveiller
Posté le 31-07-2003 à 14:49:38  profilanswer
 

VisualC++ a écrit :

enfin objet avec des struct :ange:


 
struct est class c pareil en c++, c juste con d'utiliser deux mots clef pour désigner la même chose  [:spamafote]


---------------
Le Tyran
n°473231
Joel F
Real men use unique_ptr
Posté le 31-07-2003 à 14:49:39  profilanswer
 

Certes je me comprends .... tu remarqueras que j'avais corrigé  :whistle:

n°473233
haazheel
Posté le 31-07-2003 à 14:50:18  profilanswer
 

VisualC++ a écrit :

enfin objet avec des struct :ange:


 
Je vois pas où est le problème... J'ai pu lire tout partout que struct est équivalent à une classe, sauf que tout est par défaut public
 
Mais là ils sont précisés, donc c'est pareil, non?


---------------
Another .Net Blog
mood
Publicité
Posté le 31-07-2003 à 14:50:18  profilanswer
 

n°473234
Joel F
Real men use unique_ptr
Posté le 31-07-2003 à 14:51:16  profilanswer
 

Oui mais c'est moche.
Reserve l'utilisation des struct au structure de données ne contenant que des memebres publiques, ca rendra les choses clair++

n°473237
haazheel
Posté le 31-07-2003 à 14:51:49  profilanswer
 

Joel F a écrit :

Ca sera toujour splus propre que de faire ca ....
reflechis mieux a ton approche objet.
 


 
Je ne comprends pas en quoi ce que je fais ne respecte pas la POO...
 
Alors quelles sont les fonctions que je devrais rajouter dans ma classe DATA pour la respecter?


---------------
Another .Net Blog
n°473238
VisualC++
J'va y penser ...
Posté le 31-07-2003 à 14:52:00  profilanswer
 

Bah de mon experience perso y a des choses que les struct supporte pas suivant les compilo et OS (comme un constructeur/destructeur cequi est bien genant pour une appelation dite objet)
 
Enfin cela n engage que moi

n°473246
LetoII
Le dormeur doit se réveiller
Posté le 31-07-2003 à 14:54:38  profilanswer
 

VisualC++ a écrit :

Bah de mon experience perso y a des choses que les struct supporte pas suivant les compilo et OS (comme un constructeur/destructeur cequi est bien genant pour une appelation dite objet)
 
Enfin cela n engage que moi


 
Travaillerais tu avec le compilo qui a inspiré ton pseudo? C pas un vrai compilo c++! :D


Message édité par LetoII le 31-07-2003 à 14:54:47

---------------
Le Tyran
n°473247
Joel F
Real men use unique_ptr
Posté le 31-07-2003 à 14:55:07  profilanswer
 

haazheel a écrit :


 
Je ne comprends pas en quoi ce que je fais ne respecte pas la POO...
 
Alors quelles sont les fonctions que je devrais rajouter dans ma classe DATA pour la respecter?


 
respecte au moins la FCC (forme canonique de Coplien)
 
Constructeur par défaut
Constructeur de recopie
destructeur
operateur d'affectation ...
 
et puis ecris juste class a la place de struct :O

n°473255
VisualC++
J'va y penser ...
Posté le 31-07-2003 à 14:56:19  profilanswer
 

LetoII a écrit :


 
Travaillerais tu avec le compilo qui a inspiré ton pseudo? C pas un vrai compilo c++! :D


 
Entre autre mais les pb c plutot avec gcc ;)

n°473259
Joel F
Real men use unique_ptr
Posté le 31-07-2003 à 14:57:03  profilanswer
 

VisualC++ a écrit :


 
Entre autre mais les pb c plutot avec gcc ;)


 
bah GCC == 0 problem désolé , le GCC 3.3 rulezdaworld :O

n°473267
VisualC++
J'va y penser ...
Posté le 31-07-2003 à 14:58:35  profilanswer
 

j ai pas dit que le code au dessus pose pb la avec gcc, mais une structure avec un constructeur gcc compile pas (ver 3.2 et 3.3 sous solaris en 64bits par exemple ... teste y a moins de 15 jours)

n°473272
haazheel
Posté le 31-07-2003 à 14:59:00  profilanswer
 

Joel F a écrit :


 
respecte au moins la FCC (forme canonique de Coplien)
 
Constructeur par défaut
Constructeur de recopie
destructeur
operateur d'affectation ...
 
et puis ecris juste class a la place de struct :O


 
Mis à part struct, que je viens de changer, ma classe répond au reste...
 
Mais tu me conseillais d'ajouter une fonction find(), qu'est-ce qu'il faudrait que je rajoute en plus?


---------------
Another .Net Blog
n°473278
Joel F
Real men use unique_ptr
Posté le 31-07-2003 à 15:00:13  profilanswer
 

ben  
 

Code :
  1. class DATA
  2. {
  3.   // tout tes trucs
  4. iterateur find( AnsiString text ) { return TA.find(text); }
  5. };

n°473333
haazheel
Posté le 31-07-2003 à 15:14:03  profilanswer
 

Ca ok, mais comme je l'ai mentionné plus haut, j'ai des maps qui sont imbriquées les unes dans les autres...
 
Est-ce que je dois créer une méthode find() pour chacun d'entre elles?


---------------
Another .Net Blog
n°473339
Joel F
Real men use unique_ptr
Posté le 31-07-2003 à 15:17:01  profilanswer
 

Bah a toi d'ecrire un algo de recherche propre la dedans.

n°473346
haazheel
Posté le 31-07-2003 à 15:21:25  profilanswer
 

Joel F a écrit :

Bah a toi d'ecrire un algo de recherche propre la dedans.


 
Ouais, bah je l'ai déjà écrit dans les classes qui en ont besoin... Donc je vais en rester là...
 
Merci pour tout!!


---------------
Another .Net Blog
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Référence à une fonction d'une autre classe

 

Sujets relatifs
caster une fonction[Perl] classer des e-mails en fonction du fournisseur
Classe de lecture de fichier encodées - Approche Objetdefinir une touche qui lancera une fonction a n importe quel moment ?
besoin de testeurs: retour de fonctionChanger une image en fonction de la sélection d'un menu déroulant ?
listbox qui se place en fonction des caracteres tapésfonction de remplacement de html_entity_decode()
Dans excel : affecter un intitulé en fonction d'une valeurGestion des erreurs sur la fonction mail.
Plus de sujets relatifs à : Référence à une fonction d'une autre classe


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR