Operateur de transtypage

Operateur de transtypage - C++ - Programmation

Marsh Posté le 17-01-2005 à 18:11:17    

Bonjour,
 
Pour l'écriture d'un simulateur, je voudrais me définir des classes d' "items". J'appelle un item pour mon programme un bit ou un entier non signé, accompagné de la date de sa dernière modification.
Ces items travaillent sur une référence, ce qui me permet par exemple de déclarer des items bits à l'intérieur d'un item octet.
 

Code :
  1. class item_bit {
  2. public :
  3.  item_bit(BYTE&  octet, int numero) ; // bit d'un octet
  4.  [...]
  5.  ~item_bit() ;
  6.  operator bool(void) ; // Lecture valeur bool
  7.  FILETIME derniereModification(void) ;
  8.  item_bit& operator=(bool valeur) ; // Ecriture à partir d'un booleen
  9.  [...]
  10. private :
  11.  [...]
  12.  BYTE&  lOctet ;
  13.  int    bit    ;
  14.  FILETIME dateDerniereModification ;
  15. } ; // class item_bit
  16. typedef class module_simule::item_bit    ITEM_BIT  , *PITEM_BIT   ;
  17. template <class T>
  18. class item {
  19. public :
  20.  item(T& donnee) : laDonnee(donnee) { GetSystemTimeAsFileTime(&dateDerniereModification) ; } ;
  21.  ~item() {} ;
  22.  FILETIME derniereModification(void) { return dateDerniereModification ; } ;
  23.  operator T(void) { messageDeDebug("operator T(void)\n" ) ; T donnee ; donnee = laDonnee ; messageDeDebug("operator T(void) : return\n" ) ; return donnee ; } ; // Lecture
  24.  item& operator=(T valeur) { laDonnee = valeur ; GetSystemTimeAsFileTime(&dateDerniereModification) ; return *this ; } ; // Ecriture
  25.  [...]
  26. private :
  27.  T& laDonnee ;
  28.  FILETIME dateDerniereModification ;
  29. } ; // class item
  30. typedef class module_simule::item<BYTE>  ITEM_BYTE , *PITEM_BYTE  ;
  31. [...]


 
Le problème que j'ai se situe au niveau de l'opérateur de transtypage vers un T :
 

Code :
  1. operator T(void)
  2. {
  3. T donnee ;
  4. donnee = laDonnee ;
  5. return donnee ;
  6. }


 
Mon code se plante lamentablement sur la ligne

donnee = laDonnee ;


 
Mes items sont déclarés dans une classe "module" (dérivée d'une class module_simule) sous la forme :
 
.h

Code :
  1. class Module16RO : public module_simule {
  2. public :
  3. Module16RO(PESBIM_SIMULEE hote) ;
  4. ~Module16RO() {} ;
  5. [...]
  6. private :
  7. BYTE zz_sorties1 ;
  8. BYTE zz_sorties2 ;
  9. public : // Déclaration des items
  10. ITEM_BIT   O01            ;
  11. ITEM_BIT   O02            ;
  12. ITEM_BIT   O03            ;
  13. [...]
  14. ITEM_BIT   O16            ;
  15. ITEM_BYTE  Sorties1       ;
  16. ITEM_BYTE  Sorties2       ;
  17. } ; // class Module16RO


 
.cpp

Code :
  1. #include "Module16RO.h"
  2. Module16RO::Module16RO(PESBIM_SIMULEE hote) :
  3. ///////////////////////////////////////////////////////////////////////////////
  4. // Paramétrage des items :
  5. O01            ( zz_sorties1       ,  0 ) ,
  6. O02            ( zz_sorties1       ,  1 ) ,
  7. O03            ( zz_sorties1       ,  2 ) ,
  8. [...]
  9. O16            ( zz_sorties2       ,  7 ) ,
  10. Sorties1       ( zz_sorties1            ) ,
  11. Sorties2       ( zz_sorties2            ) ,
  12. ///////////////////////////////////////////////////////////////////////////////
  13. module_simule(hote)
  14. {
  15. Sorties1 = 0 ;
  16. Sorties2 = 0 ;
  17. }
  18. [...]


 
 
Je ne comprends pas pourquoi cela peut se planter, un item ayant la même durée de vie que le module auquel il appartient, et la variable référencée faisant elle aussi partie du module...
 
 
 
 
surcharge operateur transtypage reference

Reply

Marsh Posté le 17-01-2005 à 18:11:17   

Reply

Marsh Posté le 17-01-2005 à 18:35:34    

   * operator T(void)
    * {
    *     T donnee ;
    *     donnee = laDonnee ;
    *     return donnee ;
    * }
 
 
 
(void) inutile
et puis c'est pas const
 
 
le reste, tu penses quand même pas qu'on va lire toutes les triperies de ton truc : isole le problème.
 
 
et puis tu ferais bien de relire ton chapitre sur le mot clef "const" : c'est bien simple t'en a mis aucun, par contre les reférence ça y va !

Reply

Marsh Posté le 17-01-2005 à 20:45:04    

<content mais pas sérieux>
Taz je t'aime  :love: !
J'ai collé des const partout, j'ai rien touché d'autre et ca fonctionne  :D  
</content mais pas sérieux>
 
Maintenant la partie difficile, ca va être de comprendre pourquoi.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed