Bonjour,
Je suis actuellement entrains de développer un projet en C++, et tente évidemment d'être le plus générique possible.
Le principe général du module concerné est de permettre de segmenter des images.
J'utilise ici les templates pour permettre d'utiliser le même code quelque soit le nombre de dimensions de l'image (1D Gray ou 3D RGB/HUV...).
J'ai donc une classe template Spliter<T> qui défini les bases d'un objet se chargeant de segmenter l'image, et j'ai défini avec des typedef le nombre de de dimensions :
Cela fonctionne bien. Maintenant je veux pouvoir hériter des "typedef" définis précédemment pour implémenter mes techniques de segmentation.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 template < typename T > class Spliter { private: Image * _image; public: Spliter (Image *image) :_image(image){}; }; typedef Spliter<double> Spliter1D;
Voici un exemple avec une classe Test :
A la compilation j'obtiens une référence indéfinie vers le constructeur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 class Test : public Spliter1D { public: Test(Image *image) : Spliter1D(image){}; virtual ~Test(); };
Il me semble qu'en C++ les templates ne sont pas compilées comme les classes standards, donc je comprend bien la référence indéfinie. Mais n'y a t'il pas un moyen de faire fonctionner mon système ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Test.o: In function `Test': ****/segmentation/Test.cpp:7: undefined reference to `Spliter<double>::Spliter(Region*)'
En vous remerciant d'avance,
Nico
Partager