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:
la class Essay:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 Mere:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
les class Filles
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
et bien sur les insultes du compilateurs:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
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.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 ===|
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.
Partager