Surcharge d'une méthode appartenent à un patron de classe - C++ - Programmation
Marsh Posté le 23-11-2006 à 13:37:48
Novsirion a écrit : Bonjour à tous. |
Le probleme vient du fait que pour des raisons que je n'exposerai pas ici, il n'est possible d'instacier des fonctions qui soit a la fois virtuelle et template. Il faut donc que tu revois ton architecture si c'est le cas.
Marsh Posté le 23-11-2006 à 13:59:00
papangue a écrit : Le probleme vient du fait que pour des raisons que je n'exposerai pas ici, il n'est possible d'instacier des fonctions qui soit a la fois virtuelle et template. Il faut donc que tu revois ton architecture si c'est le cas. |
Ce n'est pas le cas ici, puisqu'il s'agit d'une fonction membre (non template) d'une classe template, et non pas d'une fonction membre template d'une classe (template ou non), ce qui qui serait efectivement interdit.
Marsh Posté le 23-11-2006 à 14:17:10
Chez moi, ça marche bien :
Code :
|
pas de warning ni d'erreur à ce sujet à la compilation ; l'exécution fait ce qu'on attend :
~/tmp/hfr> g++ --version |
Je sais pas ce qui va pas chez toi...
Marsh Posté le 23-11-2006 à 14:48:53
Merci pour ton aide francesco j'ai trouvé mon erreur. C'était un truc tout bête en fait. Mais ne sachant pas ce point là j'ai préféré consulter votre avis. Tiens en parlant de template j'ai une question pour la STL :
#include <iostream>
#include <list>
using namespace std;
template <typename T> class Base
{
public:
list<T> m_list;
list<T>::iterator m_ite;
};
int main( int argc, char ** argv )
{
Base<int> d;
return 0;
}
je compile et j'obtiens une erreur expected ; before m_ite
Marsh Posté le 23-11-2006 à 15:14:49
il faut mettre le mot-clé typename devant list<T>::iterator.
De manière générale, lorsque tu as un nom de type pleinement qualifié (i.e. de la forme toto::type) servant à déclarer un membre dans une classe template, il faut que tu spécifies qu'il s'agit d'un type, en utilisant le mot-clé typename (attention, ce n'est pas la même sémantique que le typename que tu mets dans la déclaration du template)
Marsh Posté le 23-11-2006 à 12:25:11
Bonjour à tous.
Voici mon soucis.
J' ai une classe mère ou j'utilise un patron de class.
(Fichier a.h)
template <typename T> class a
{
public:
virtual T * methode() = 0;
};
Je dérive ma classe.
(fichier b.h)
class b : public a<int>
{
public:
int * methode();
}
Le problème lorsque je veux créer une instance de b, j'ai une erreur de compilation me signalant que ce n'est pas possible car b est abstraite. Don j'en déduis que b ne surcharge pas la méthode virtuel de a. Ma question est pourquoi? et comment faire ?
Merci d'avance pour vos réponse.
Cordialement, Novsirion