julien_boss
Messages postés165Date d'inscriptionsamedi 4 juin 2005StatutMembreDernière intervention24 octobre 2007
-
17 mars 2007 à 13:41
julien_boss
Messages postés165Date d'inscriptionsamedi 4 juin 2005StatutMembreDernière intervention24 octobre 2007
-
19 mars 2007 à 20:51
Bonjour,
j'ai une classe LogFile, dans laquelle j'ai surchargé l'operateur [] pour qu'il renvoit un ENREGISTREMENT (structure perso).
Je fais ceci :
LogFile *lf, lf2;
lf = new LogFile();
ENREGISTREMENT en = lf[2], //Bug à ce niveau là
en2 = lf->operator[](2), //Fonctionne ...
en3 = lf2[2]; //Fonctionne aussi ...
delete lf;
et là ca parait clair, ca coince lorsque l'objet est créé dynamiquement
voici la définition (ou déclaration, je ne sais jms distinguer les 2 ) de la surcharge :
cs_juju12
Messages postés966Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 4 mars 20104 17 mars 2007 à 13:59
Déjà c'est l'implémentation là :-)
Ensuite c'est normal que ça plante:
lorsque tu écris : en=lf[2];
lf est un pointeur donc en fait avec cette écriture on tente d'accéder au deuxième élément du tableau alors qu'il n'en contient qu'un seul d'où bug.
L'écriture correcte est : lf->operator[](2) ou bien encore (*lf)[2] qui cette fois appelle la fonction operator[] de l'objet.
C'est pas forcément très joli à écrire peut-être qu'en passant par des références :
LogFile& RLF=(*lf).
et ensuite en=RLF[2];
cs_juju12
Messages postés966Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 4 mars 20104 19 mars 2007 à 11:26
Pour le premier truc c'est simple :
tu crées un tableau à l'intérieur de la procédure et tu renvoies une référence dessus...sauf que ce tableau est détruit à la fin de la procédure et donc ta référence est invalide=>erreur
Partant de là tes deux autres bouts de code devraient pas marcher non plus
julien_boss
Messages postés165Date d'inscriptionsamedi 4 juin 2005StatutMembreDernière intervention24 octobre 2007 17 mars 2007 à 14:05
merci ca marche comme ca, c'était assez con mais fallait y penser ^^
y'aurait il quand meme un moyen de faire marcher l'opérateur [] sur un pointeur d'objet, avec une implémantation différente ?
cs_juju12
Messages postés966Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 4 mars 20104 17 mars 2007 à 14:14
Je vois pas d'autres méthodes que :
en=lf->operator[](2) // appel de fonction depuis pointeur
en=(*lf)[2] // appel depuis objet pointé par le pointeur
en=RLF[2] // où RLF est une référence à l'objet pointé par lf, peut-être l'écriture la plus jolie
Vous n’avez pas trouvé la réponse que vous recherchez ?