Définition const. & dest. d'une classe template
J'ai hésité entre poster ici et sur le forum propre à Eclipse car je n'arrive pas à comprendre d'où vient mon problème, et s'il s'agit d'un problème lors du build automatique d'Eclipse ...
Voilà le problème :
j'ai une classe template Stack toute basique, avec un constructeur qui exige un paramètre : la taille de la pile, le tout sur deux fichiers : Stack.hpp et Stack.cpp comme suit :
(code réduit au minimum, les deux fichiers sont bien dans un répertoire source nommé "tool")
Stack.hpp
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #ifndef _STACK_HPP_
#define _STACK_HPP_
template <typename T>
class Stack {
private:
int iSizeMax;
int iSize;
public:
Stack(int size);
~Stack();
};
#endif // _STACK_HPP_ |
Stack.cpp
Code:
1 2 3 4 5 6 7 8 9 10 11
| #include "Stack.hpp"
template <typename T>
Stack<T>::Stack(int size) : iSizeMax(size), iSize(0) {
return;
}
template <typename T>
Stack<T>::~Stack() {
return;
} |
Jusque là aucun problème.
Mais en essayant d'instancier une pile dans un fichier main.cpp j'obtiens une erreur :
main.cpp
Code:
1 2 3 4 5
| #include "tool/Stack.hpp"
int main() {
Stack<int> myStack(30);
return 0;
} |
Les erreurs sont :
1) ligne contenant : Stack<int> myStack(30);
undefined reference to `Stack<int>::Stack(int)
2) ligne contenant : return 0;
undefined reference to `Stack<int>::~Stack()
Lorsque je remplace directement dans la déclaration (.hpp) de ma classe le constructeur ou le destructeur par :
Stack(int size) { }
~Stack() { }
les erreurs correpondantes disparaissent, ce qui m'a fait penser à un problème de build où Eclipse essairait de compiler main.cpp avant Stack.cpp.
Votre diagnostique ?
je ne sais plus créer/instancier une malheureuse classe template, ou je dois commencer à utiliser mon propre Makefile ?
Autre question au passage : quelle est la différence entre
template <class T>
et
template <typename T> ?