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 :
- class item_bit {
- public :
- item_bit(BYTE& octet, int numero) ; // bit d'un octet
- [...]
- ~item_bit() ;
- operator bool(void) ; // Lecture valeur bool
- FILETIME derniereModification(void) ;
- item_bit& operator=(bool valeur) ; // Ecriture à partir d'un booleen
- [...]
- private :
- [...]
- BYTE& lOctet ;
- int bit ;
- FILETIME dateDerniereModification ;
- } ; // class item_bit
- typedef class module_simule::item_bit ITEM_BIT , *PITEM_BIT ;
- template <class T>
- class item {
- public :
- item(T& donnee) : laDonnee(donnee) { GetSystemTimeAsFileTime(&dateDerniereModification) ; } ;
- ~item() {} ;
- FILETIME derniereModification(void) { return dateDerniereModification ; } ;
- operator T(void) { messageDeDebug("operator T(void)\n" ) ; T donnee ; donnee = laDonnee ; messageDeDebug("operator T(void) : return\n" ) ; return donnee ; } ; // Lecture
- item& operator=(T valeur) { laDonnee = valeur ; GetSystemTimeAsFileTime(&dateDerniereModification) ; return *this ; } ; // Ecriture
- [...]
- private :
- T& laDonnee ;
- FILETIME dateDerniereModification ;
- } ; // class item
- typedef class module_simule::item<BYTE> ITEM_BYTE , *PITEM_BYTE ;
- [...]
|
Le problème que j'ai se situe au niveau de l'opérateur de transtypage vers un T :
Code :
- operator T(void)
- {
- T donnee ;
- donnee = laDonnee ;
- return donnee ;
- }
|
Mon code se plante lamentablement sur la ligne
Mes items sont déclarés dans une classe "module" (dérivée d'une class module_simule) sous la forme :
.h
Code :
- class Module16RO : public module_simule {
- public :
- Module16RO(PESBIM_SIMULEE hote) ;
- ~Module16RO() {} ;
- [...]
- private :
- BYTE zz_sorties1 ;
- BYTE zz_sorties2 ;
- public : // Déclaration des items
- ITEM_BIT O01 ;
- ITEM_BIT O02 ;
- ITEM_BIT O03 ;
- [...]
- ITEM_BIT O16 ;
- ITEM_BYTE Sorties1 ;
- ITEM_BYTE Sorties2 ;
- } ; // class Module16RO
|
.cpp
Code :
- #include "Module16RO.h"
- Module16RO::Module16RO(PESBIM_SIMULEE hote) :
- ///////////////////////////////////////////////////////////////////////////////
- // Paramétrage des items :
- O01 ( zz_sorties1 , 0 ) ,
- O02 ( zz_sorties1 , 1 ) ,
- O03 ( zz_sorties1 , 2 ) ,
- [...]
- O16 ( zz_sorties2 , 7 ) ,
- Sorties1 ( zz_sorties1 ) ,
- Sorties2 ( zz_sorties2 ) ,
- ///////////////////////////////////////////////////////////////////////////////
- module_simule(hote)
- {
- Sorties1 = 0 ;
- Sorties2 = 0 ;
- }
- [...]
|
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