Bonjour à tous.
A force de développer toujours plus en c++, mon intérêt et ma curiosité ne cessent de grandir. J'ai récemment eu envie de m'essayer aux templates. J'ai consulté la faq, des cours et je (pense) comprendre leur fonctionnement.
Avant d'essayer des choses plus complexes (j'aimerais créer une classe template qui représente un tableau), je commence par du code super bateau, mais qui arrive à ne pas fonctionner
Ci-après le code.
Note : je développe sous VS2005
Fichier kArray.h
Fichier kArray.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 #ifndef __kArray_h #define __kArray_h template <typename T> class kArray { public : kArray(void); }; #endif // __kArray_h
Fichier sandboxTemplate.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 #include "kArray.h" template <typename T> kArray<T>::kArray(void) { }
Lorsque je compile, j'ai l'erreur suivante
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 #pragma warning( disable : 4311 ) #pragma warning( disable : 4312 ) #include <iostream> #include "kArray.h" using namespace std; template <typename T> class bleh { public : bleh(void); }; template <typename T> bleh<T>::bleh(void) { } int main(int argc, _TCHAR* argv[]) { bleh<float> b; // Aucun problème à la compilation kArray<float> kA; // Problème à la compilation system("pause"); return 0; }Si je commente kArray<float> kA, je n'ai plus de problème et le programme s'exécute. Ce que je cherche à comprendre, c'est pourquoi ma classe template bleh déclarée dans le même fichier que le main, qui est la même que kArray, arrive à passer au compilo, et pas celle que j'inclus ?error LNK2001: unresolved external symbol "public: __thiscall kArray<float>::kArray<float>(void)" (??0?$kArray@M@@QAE@XZ
J'ai beau chercher je ne comprends toujours pas... Et tous les exemples que j'ai vu sont fait ainsi : la classe template est toujours déclarée dans le même fichier que le main. Du coup je ne sais pas si c'est moi qui ai mal fait, ou si j'oublie quelque chose.
Je vous remercie par avance!
Goulmak.
Partager