begin process at 2012 05 29 20:20:21
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Général

 > 

Problème avec un pointeur passé en paramètre


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

Problème avec un pointeur passé en paramètre

vendredi 7 septembre 2007 à 14:39:57 | Problème avec un pointeur passé en paramètre

exar

Membre Club
Bonjour à tou(te)s !
J'ai un petit problème avec un pointeur passé en paramètre...
Voici ce qui se passe:
J'ai une classe abstraite A, une classe fille AA et une troisième classe B.
Ma classe B a une méthode qui reçoit en paramètre un A*.
J'aimerais que la valeur du paramètre soit modifiée.  Or, quand je passe un AA*, ça ne fonctionne pas...
J'ai tenté de modifier la méthode en passant un A*&, mais lorsque je passe un AA*, il me dit que le compilo me dit que le type est incorrect, qu'il ne sait pas passer un AA*&, parce que le type est un A*&...
Quelqu'un peut m'aider ?
Merci d'avance !
vendredi 7 septembre 2007 à 15:08:33 | Re : Problème avec un pointeur passé en paramètre

juju12

C'est normal que ca plante, c'est illégal : tu as le droit de convertir un AA* en A* (base du polymorphisme quand même) mais pas un AA* en A*&. Pourquoi cela ? Imagine que dans ta fonction tu alloues au pointeur un objet de base (oublions l'abstraction ca change rien) :

void Test(A*&pA){pA=new A;return;}

Dans ce cas, si tu passes un AA* en appel de la fonction, tu vas te retrouver à essayer de convertir un A* en AA*... ce qui est pour le coup interdit.

vendredi 7 septembre 2007 à 15:22:19 | Re : Problème avec un pointeur passé en paramètre

exar

Membre Club
Merci juju12, mais alors, comment puis-je faire ?
vendredi 7 septembre 2007 à 16:50:37 | Re : Problème avec un pointeur passé en paramètre

juju12

TU PEUX PAS !
Ou alors surcharge ta fonction pour qu'elle accepte en argument un coup un A*&, un autre version un AA*&.

vendredi 7 septembre 2007 à 17:01:59 | Re : Problème avec un pointeur passé en paramètre

exar

Membre Club
En fait, je dois faire hériter pas mal de classes de A, et j'aurais voulu utiliser le polymorphisme, parce que toutes mes classes filles doivent utiliser cette fonction memebre...
Il n'y a vraiment AUCUN moyen ?
J'avais pensé à l'identification dynamique des types avec typeinfo et bidouiller qqch avec ça, mais je trouve cela un rien fastidieux...
vendredi 7 septembre 2007 à 17:15:23 | Re : Problème avec un pointeur passé en paramètre

DeAtHCrAsH

A*& ????
Kesako.... Jamais vu o_O !
* = Pointeur et &=Reference.
C'est joli mais je doute de l'utilité de ce truc....

Shell
vendredi 7 septembre 2007 à 17:20:19 | Re : Problème avec un pointeur passé en paramètre

juju12

DeAtHCrAsH => moi non plus j'avais jamais vu
exar => bien sûr mais pourquoi as-tu absolument besoin de passer le pointeur par référence? C'est pas très propre de faire ca, après vu de l'extérieur on sait pas si le code a créé un nouvel objet, s'il a libéré correctement l'ancien etc...

vendredi 7 septembre 2007 à 17:48:45 | Re : Problème avec un pointeur passé en paramètre

exar

Membre Club
Si, ça existe.  En fait, à l'intérieur de ma fonction memebre, je dois modifier mon pointeur.  Je ne crée pas de nouvel objet.
J'ai tenté de surcharger l'opérateur d'affectation pour cela, d'abord en le déclarant virtuel pu dans la classe de base, puis simplement virtuel, mais il ne l'appelle jamais lorsque j'affecte ma nouvelle valeur au paramètre...  J'ai fait une trace d'exécution, et bizzarement, il n'appelle jamais l'opérateur surchargé...
vendredi 7 septembre 2007 à 18:28:03 | Re : Problème avec un pointeur passé en paramètre

juju12

Mais POURQUOI tu veux modifier ton pointeur?
vendredi 7 septembre 2007 à 18:47:18 | Re : Problème avec un pointeur passé en paramètre

exar

Membre Club
Ben voilà, en fait, ma classe B représente un fichier.  La méthode appellée (qui a pour paramètre A*) va lire dans le fichier et récupère les données.  La classe A est la classe de base, abstraite.  AA est une des classes filles.  A possède une méthode virtuelle pure qui renvoie un A*.  Dans la méthode de B, j'essaie de faire une affectation sur mon paramètre, en appelant la méthode de AA*.
En bref, tu as un truc du style:
class A{
    //membres privés, constructeurs, destructeur, etc...
   virtual A* readfile(fstream&)=0;
}

class AA: public A{
   //idem que A
   A* readfile(stream&);
};

Implémentation:

A* AA::readfile(fstream& arg){
   //récupération des données dans le stream
   return new AA(<mes données>);
}

Dans B:
class B{
private:
   fstream _file;
   //...
   void get(A*);
};

Implémentation:
void B::get(A* arg){
   arg=arg->readfile(_file);
}

Ainsi, j'espérais pouvoir récupérer mes données pour n'importe quel descendant de A...  Mais ça ne fonctionne pas...  J'arrive à récupérer les données dans le fichier, mais mon pointeur n'est pas modifié...

1 2 3

Cette discussion est classée dans : problème, classe, paramètre, pointeur, aa


Répondre à ce message

Sujets en rapport avec ce message

pointeur de classe [ par gbcha ] bonjour,J'ai un problème avec microsoft visual C++. J'avais crée un certain nombre de classe, avec un certain nombre de pointeurs sur ces classes. J'a [C] Pointeur int comme paramètre dans une function qui ne marche pas [ par nitrique ] Bonjour à tous,J'ai retourné les pointeurs dans tous les sens mais rien n'y fait.J'aimerais modifier la valeur d'une variable int à l'interieur d'une Question avec les constructeurs de copies [ par OrsE ] Salut tout le monde! Voilà, j'ai un problème avec des classes, et je voudrais savoir si je peux le solutionner avec un constructeur de copie. Voilà un Problème utilisation fonction [ par sidhannowe ] Bonjour, J'utilise la classe screenshot présentée ici: http://www.cppfrance.com/code.aspx?id=21255 mais lorsque je compile Dev c++ m'indique des erre Problème de paramètre [ par jeromedu94 ] bonjour,je voudrais faire une fonction mais le nombre de paramètre à transmettre n'est pas fixe,  et je voudrais savoir comment il faut faire.C'est le Erreur de segmentation... Qu'est ce que c'est ??? :o [ par Rouliann ] Salut tout le monde j'ai un gros problème et malgré tous mes essais je n'arrive pas à le résoudre... Il n'y a pas d'erreurs à la compilation mais lors Fonctions callback [ par neodelphi ] Bonjour tout le monde ! J'aimerai savoir s'il est possible de passé en paramètre un pointeur de méthode en précisant une instance, je m'explique: so Problème de class [ par norton ] Bonsoir, j'ai un problème avec ma class. quand je compile ca me donne ce message d'erreur : error C2653: 'CCamera' : is not a class or namespace name Problème avec une classe [ par Freeskieur ] Hello,Je connais assez bien les classes mais là j'ai une spécialité et je capte pas comment il faut faire pour que ca passe.Ca foire sur la ligne ou i MSComm [ par Scopas ] Bonjour, j’ai un petit problème je cherche à ajouter un le contrôle ActiveX Microsoft communication control, version 6.0 (donc celui de MSComm) Sur Vi


Nos sponsors


Sondage...

Comparez les prix

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 : 1,576 sec (3)

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