Problèmes de fonctions membres de classe templates, gcc3.3.6
Bonjour à tous,
je ne sais plus quoi chercher pour utiliser une fonction membre d'une classe template sans que le linker ne râle. Je n'arrive pas à linker (mais bien à compiler) le code suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #ifndef MAILLON_HPP
#define MAILLON_HPP
template <class T>
class Maillon {
private:
T data;
Maillon<T> *suivant;
public:
Maillon();
~Maillon();
};
#endif //MAILLON_HPP |
(maillon.hpp)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #include <iostream>
using namespace std;
#include "maillon.hpp"
template <class T> Maillon<T>::Maillon()
{
cout << "constructeur de maillon" << endl;
suivant = NULL;
}
template <class T> Maillon<T>::~Maillon()
{
delete suivant;
suivant = NULL;
} |
(maillon.cpp)
Code:
1 2 3 4 5 6 7 8
|
#include "maillon.hpp"
int main()
{
Maillon<int> m;
return 0;
} |
(client.cpp)
g++ -c maillon.cpp ==> OK
g++ -c client.cpp ==> OK
g++ client.o maillon.o ==> compile mais ne linke pas :
Code:
1 2 3 4 5
| client.o(.text+0x17): In function `main':
: undefined reference to `Maillon<int>::Maillon[in-charge]()'
client.o(.text+0x22): In function `main':
: undefined reference to `Maillon<int>::~Maillon [in-charge]()'
collect2: ld returned 1 exit status |
Par contre, lorsque je remplace maillon.cpp par :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #include <iostream>
using namespace std;
#include "maillon.hpp"
Maillon<int>::Maillon()
{
cout << "constructeur de maillon" << endl;
suivant = NULL;
}
Maillon<int>::~Maillon()
{
delete suivant;
suivant = NULL;
} |
Eh bien là, ô miracle, ça linke (mais ça n'est plus un vrai beau template)......
je suis preneur si vous avez une idée, merci à vous !
P.S. : que veut dire "in-charge" ?