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 :
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];
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
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 ?
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 ?