probleme template et polymorphisme
bonjour,
je suis tombé sur un problème certainement tout bête dont je comprends la nature mais que je ne vois pas comment contourner, j'en ai fait un petit programme pour voir comment je pouvait faire mais je ne trouve pas :
le main:
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| #include "Fille.h"
#include "Essay.h"
int main()
{
FilleA fA();
FilleB fB();
Essay e();
e.essay(fA);
e.essay(fB);
return 0;
} |
la class Essay:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| #ifndef ESSAY_H
#define ESSAY_H
#include "Mere.h"
class Essay
{
public:
Essay();
virtual ~Essay();
void essay(Mere& m);
};
Essay::Essay()
{
}
Essay::~Essay()
{
}
void Essay::essay(Mere& m)
{
m.f();
}
#endif // ESSAY_H |
la class Mere:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| #ifndef MERE_H
#define MERE_H
template<typename T>
class Mere
{
public:
Mere();
virtual ~Mere();
virtual void f() = 0;
};
template<typename T>
Mere<T>::Mere()
{
}
template<typename T>
Mere<T>::~Mere()
{
}
#endif // MERE_H |
les class Filles
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| #ifndef FILLE_H
#define FILLE_H
#include "Mere.h"
#include <iostream>
class FilleA : public Mere<int>
{
public:
FilleA();
virtual ~FilleA();
virtual void f();
};
FilleA::FilleA()
{
}
FilleA::~FilleA()
{
}
void FilleA::f()
{
std::cout << "filleA" << std::endl;
}
class FilleB : public Mere<double>
{
public:
FilleB();
virtual ~FilleB();
virtual void f();
};
FilleB::FilleB()
{
}
FilleB::~FilleB()
{
}
void FilleB::f()
{
std::cout << "filleB" << std::endl;
}
#endif // FILLE_H |
et bien sur les insultes du compilateurs:
Citation:
D:\prog\essayTemplateParamFonction\Essay.h|12|error: 'Mere' is not a type|
D:\prog\essayTemplateParamFonction\Essay.h|24|error: variable or field 'essay' declared void|
D:\prog\essayTemplateParamFonction\Essay.h|24|error: missing template arguments before '&' token|
D:\prog\essayTemplateParamFonction\Essay.h|24|error: 'm' was not declared in this scope|
D:\prog\essayTemplateParamFonction\main.cpp||In function 'int main()':|
D:\prog\essayTemplateParamFonction\main.cpp|10|error: request for member 'essay' in 'e', which is of non-class type 'Essay()'|
D:\prog\essayTemplateParamFonction\main.cpp|11|error: request for member 'essay' in 'e', which is of non-class type 'Essay()'|
||=== Build finished: 6 errors, 0 warnings ===|
donc voila, j'aimerai pouvoir passer en paramètre la class Mère à une méthode de Essay, et cela pose problème car Mere est un template mais je ne peux pas mettre Mere<T> car Essai n'est pas un template, je ne vois pas comment rendre cela possible.
Et transformer Essai en template ne me servirai à rien dans mon programme, et d’ailleurs je ne pense que se soit utile, enfin j’espère pas du moins.