surcharge de fonctions C++

surcharge de fonctions C++ - Programmation

Marsh Posté le 30-07-2001 à 14:23:42    

Bonjour,
je dois surcharger une fonction qui utilise des pointeurs(de type differents lors de l'appel). J'ai essaye d'en creer une mais il y a une erreur a la compilation, a cause de l'ambiguite entre les 2 fonctions. Est ce qu'il y a un moyen de contourner le probleme?

Reply

Marsh Posté le 30-07-2001 à 14:23:42   

Reply

Marsh Posté le 30-07-2001 à 14:25:07    

Donne le le protoptype de ta fonction.
Et le libélé exacte de l'erreur.

Reply

Marsh Posté le 30-07-2001 à 14:25:24    

certainement mais ce serait plus facile si tu envoyé le code par ce que là comme ça à vide....

Reply

Marsh Posté le 30-07-2001 à 14:30:34    

voila les fonctions :
void graphicize (ITP_Position * position, ITP_Disk * disk)
 
void graphicize (ITP_Configuration * configuration, ITP_Triangle_Equilateral * triangle)
 
et l'appel:
graphicize(*((*index)->state), *((*index)->geometry));
 
 
et enfin l'erreur :
main/test.cc:189: call of overloaded `graphicize (ITP_State *&, ITP_Geometry *&)' is ambiguous
main/test.cc:127: candidates are: graphicize(ITP_Position *, ITP_Disk *) <near match>
main/test.cc:142:                 graphicize(ITP_Configuration *, ITP_Triangle_Equilateral *) <near match>
 
en sachant que position et configuration sont des classes filles de state et idem avec disk,triangle et geometry.

Reply

Marsh Posté le 30-07-2001 à 14:44:45    

La meilleur solution est intégrer la fonction "graphicize" en temps que membre d'une des classes qui sont dans les arguments.
Comme ça c'est automatique.

Reply

Marsh Posté le 30-07-2001 à 14:49:09    

malheureusement, je suis oblige de separer completement les classes qui sont en parametres et tout ce qui fait partie de la partie graphique, dont graphicize :(

Reply

Marsh Posté le 30-07-2001 à 15:04:56    

En tout cas ne peux pas donc faire comme tu en avais l'intention.
C'est clair que les compilateur ne peut pas faire les choix à ta place. Donc la solution sera un peu plus compliqué.
 
Je te propose 2 solutions, il y en a surement d'autres:
 * faire un classe de stockage par type d'objet + un classe de sotckage générale qui stocke les classes de stockages ( en plus tu gagne en optimisation). Comme ça tu sais quelle fonction "graphicize" il faut appeller.
 * Tu fais un fonction "graphicize_general" qui appelle la bonne fonction 'graphicize' en fonction du type des objets.

Reply

Marsh Posté le 30-07-2001 à 15:09:59    

Qu'est-ce que tu appelle exactement classe de stockage?
Sinon j'ai deja essaye la deuxieme solution, mais on me l'a refusee parce qu'il faut que j'utilise le polymorphisme a fond...

Reply

Marsh Posté le 30-07-2001 à 15:17:02    

Tu ne pouras pas utiliser le polymorphisme dans ce cas, ou alors il faut changer ton model objet.
 
Tes objets IDT_xxxxxx sont sockés quelques part et tu souhaites faire un tranformtation dessus cet liste objet(graphicize).  
Une classe de sockage sert à conserver cette liste objet et à en assurer l'intégrité. Un example bien connu est la classe Vector qui en inclus dans la STL.

Reply

Marsh Posté le 30-07-2001 à 15:25:52    

Merci seblamb!!
bon va falloir que j'en discute avec mon patron la (c'est lui qui m'a dit de faire de cette facon donc faut qu'il assume ;)  )

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed