polymorphisme sur un struct en C++

polymorphisme sur un struct en C++ - C++ - Programmation

Marsh Posté le 16-11-2006 à 12:07:01    

Bonjour a tous,  
 
Je cherche a pouvoir redéfinir une structure définie dans une classe A dans une classe B et continuer a utiliser des fonctions de ma classe A qui utilisait cette structure.
Plutot qu'une longue explication, voila un exemple :  
 

Code :
  1. class A
  2. {
  3.     struct MyStruct;
  4.     std::map<std::string, MyStruct*> myMap;
  5.    
  6.     A(){}
  7.     ~A(){}
  8.    
  9.     addToMap(std::string s, MyStruct *m)
  10.     {
  11.         myMap[s] = m
  12.     }
  13. }
  14. class B : A
  15. {
  16.     struct MyStruct
  17.     {
  18.         int X;
  19.         int Y
  20.     };
  21.     B()
  22.     {
  23.         MyStruct m;
  24.         m.X = 2;
  25.         m.Y = 3;
  26.         addToMap("123", m); //  <- c'est la ou ca pose probleme.
  27.     }
  28.     ~B(){}
  29. }


 
L'erreur généré par le compilo :
error: no matching function for call to 'B::addToMap(std::string, B::addToMap*)'
 
Je ne comprends pas pourquoi j'ai pas le droit de faire ca et je me demande comment je dois écrire les choses pour que ca marche.
 
Je vous remercie d'avance pour vos réponses.
 
Papynoel

Reply

Marsh Posté le 16-11-2006 à 12:07:01   

Reply

Marsh Posté le 16-11-2006 à 13:46:20    

Petit-Papy-Noel ?

Reply

Marsh Posté le 16-11-2006 à 16:48:24    

Utilise des templates!!
 

Code :
  1. template<class X>
  2. class A
  3. {
  4. ...
  5. addToMap(..., X.MyStruct*)
  6. }
  7. class B : public A<B>
  8. {
  9. etc...
  10. }

Message cité 1 fois
Message édité par ElDesdichado le 16-11-2006 à 16:51:05
Reply

Marsh Posté le 17-11-2006 à 18:04:06    

ElDesdichado a écrit :

Utilise des templates!!


Ah bon

Reply

Marsh Posté le 17-11-2006 à 18:10:20    

papynoel a écrit :

Je cherche a pouvoir redéfinir une structure définie dans une classe A dans une classe B et continuer a utiliser des fonctions de ma classe A qui utilisait cette structure.


[snip le code non compilable]
A::MyStruct et B::MyStruct sont deux types différents. Peut-être qu'une définition de MyStruct dans le corps de A ferai l'affaire ?

Citation :

addToMap("123", m); //  <- c'est la ou ca pose probleme.


addToMap("123", &m);  le type de m doit être A::MyStruct

Reply

Sujets relatifs:

Leave a Replay

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