Bonjour tout le monde,
J'ai un petit soucis avec les template.
Je cherche à créer un vecteur contenant des elements d'une classe Test qui est une classe template.
L'idée serait de pouvoir mettre dans se vecteur des instance de Test qui puissent être de type différent (ex : Test<int> ; Test<string> ; ...).
Après avoir un peu cherché j'ai vu qu'il était conseillé de passer par une classe de base (appelons la TestDeBase) et de créer un vecteur de TestDeBase*.
J'ai donc créé les fichiers suivants :
TestDeBase.cpp :
Test.cpp :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 class TestDeBase{ public : TestDeBase(){} };
main.cpp :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 #include"TestDeBase.cpp" template<typename T> class Test : TestDeBase{ public : Test() : TestDeBase(){} };
Hélas le compilateur ne semble pas apprécier :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 #include<stdlib.h> #include<stdio.h> #include<vector> using namespace std; #include"Test.cpp" int main(int argc, char *argv[]){ vector<TestDeBase *> vect(); Test<int> test(); vect.push_back(&test); return EXIT_SUCCESS; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 main.cpp: In function 'int main(int, char**)': main.cpp:11: error: request for member 'push_back' in 'vect', which is of non-class type 'std::vector<TestDeBase*, std::allocator<TestDeBase*> > ()()'
Je m'y suis mal pris ?
Ce n'est pas la bonne méthode ?
Vous avez plus simple ?
Si vous avez la réponse à une de ces questions merci d'avance !
Partager