begin process at 2012 05 30 04:37:21
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Général

 > 

Surcharge de l'operateur [] => erreur avec un objet créé dynamiquement


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Surcharge de l'operateur [] => erreur avec un objet créé dynamiquement

samedi 17 mars 2007 à 13:41:19 | Surcharge de l'operateur [] => erreur avec un objet créé dynamiquement

julien_boss

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 :

ENREGISTREMENT& LogFile::operator[](int n)
{
    ENREGISTREMENT enVoid = {-1, " ", " ", " ", " "};
    ENREGISTREMENT &enV = enVoid;           
    if(Good() && n>=0 && n<m_nbEn)
        return m_tabEn[n];
    else return enV; 
}


donc comment faire pour que la surcharge de [] marche sur un objet créé dynamiquement ? merci

samedi 17 mars 2007 à 13:59:01 | Re : Surcharge de l'operateur [] => erreur avec un objet créé dynamiquement

juju12

Réponse acceptée !
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];
samedi 17 mars 2007 à 14:05:47 | Re : Surcharge de l'operateur [] => erreur avec un objet créé dynamiquement

julien_boss

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 ?
samedi 17 mars 2007 à 14:14:05 | Re : Surcharge de l'operateur [] => erreur avec un objet créé dynamiquement

juju12

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
samedi 17 mars 2007 à 20:17:41 | Re : Surcharge de l'operateur [] => erreur avec un objet créé dynamiquement
samedi 17 mars 2007 à 20:47:01 | Re : Surcharge de l'operateur [] => erreur avec un objet créé dynamiquement

julien_boss

tiens j'en profite pour demander pourquoi ce code foire :

je détail d'abord la structure ENREGISTREMENT :
struct ENREGISTREMENT
{
    int id;               
    std::string login;    
    std::string pass;     
    std::string email;    
    std::string site;     
};


LogFile lf;
ENREGISTREMENT e = lf[10]; 
   //Sachant que m_nbEn<10 (voir l'implémentation de la surcharge de l'op [] ). Ca foire à ce niveau là

alors que ce code marche :

LogFile lf;
cout << lf[10].id << endl;   //affiche -1 (voir là encore l'implémentation de la surcharge de [])

celui ci par contre fait planter méchament la console :

LogFile lf;
cout << lf[10].login << endl; 
    //Devrait afficher " " mais il n'en est rien

Une idée mes braves ?
lundi 19 mars 2007 à 11:26:44 | Re : Surcharge de l'operateur [] => erreur avec un objet créé dynamiquement

juju12

Réponse acceptée !
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
lundi 19 mars 2007 à 20:51:32 | Re : Surcharge de l'operateur [] => erreur avec un objet créé dynamiquement

julien_boss

Merci tout fonctionne


Cette discussion est classée dans : enregistrement, objet, créé, surcharge, lf


Répondre à ce message

Sujets en rapport avec ce message

Enregistrement d'un objet [ par MrKribou ] En c++ existe t'il des fonctions permettant d'enregistrer des instances de classe, des objets quoi, dans un fichier pour pouvoir les recuper ensuite o Delete avec un objet ayant créé une donnée static [ par themaste ] Bonjour à tous!Je suis actuellement sur la reprise d'un programme, et je dois y ajouter une nouvelle fonctionnalité. En travaillant sur celle-ci, j'ai surcharge d'opérateurs [ par dyroj ] Bonjour, En apprenant un cour sur le langage c++ je suis arriver au surcharge d'opérateurs. Je pence avoir compris le fonctionnement mais il y a quel surcharge operator << [ par elninodu42 ] Bonjour, Je dois trouver une solution permettant d'afficher dans un flux de chaine. Je ne peux pas utiliser de string... Je dois donc faire une surc objet persistant [ par dalimrabet ] [b][i][size=100]salut tout le monde :) je suis débutant dans le domaine de programmation , et il nous a été demandé dans la classe de créer des objets CompDatPacket : HELP!! "Reception , stockage , et enregistrement de données" [ par sethakadef ] Bonjour, J ai besoin d aide: je suis en train de réaliser une application qui analyse une liaison serie entre deux terminaux. [u]Objectif[/u]: recuper Capter les "messages" ou les "évènements" d'une application Office - Sur quel objet l'utilisateur clique t-il ? [ par FFREDDY ] Bonjour à tous, En premier lieu, je précise de suite que je ne suis pas développeur (quelques petits bouts de code en VB6 il y a longtemps, rien de p Détection d'objet et de mouvement [ par starlogix ] Bonjour, Je suis actuellement étudiant dans une école d'ingénieur dans le domaine du multimédia. Mon projet tuteuré (que je dois avoir fini dans 3 se Modifier une source C++ pour projet Robotique [ par aldrac ] Bonjour a tous, comme le titre l'indique je cherche de l'aide pour modifier un projet en C++. J'ai récupérer une source (libre de droit) que je dois m Comment faire un double enregistrement [ par HardinLTyler ] Bonjour à tous! J'aimerais avoir vos idées sur comment faire un double enregistrement automatique applicable sur toute la suite Office, par simple en


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 6,349 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales