Problème avec les templates
Salut,
Voila, cela fait un bon moment que je code en c++ (plus d'un an), mais, je dois dire que, je suis l'un des fanatiques du c :p, du moment que je combine efficacité du c avec poo du c++, mais, bon...
Voila mon problème, à un moment donnée, j'ai eu marre des void*, et j'ai décidé de passer aux templates, je suis en train de réécrire ma lib pour gérer listes, piles, files, cartes, en utilisant (en essayant) les templates, voila ce que ça donne en code:
le .h:
Code:
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| #define EXPORT __declspec(dllexport)
#ifdef DEBUG
#define _debug 1
#else
#define _debug 0
#endif
#ifndef DEF_FIS_CONT_H
#define DEF_FIS_CONT_H
#include<iostream>
#include<string>
template< class T >
class EXPORT fis_list
{
public:
fis_list();
~fis_list();
int add_at_head(T* data);
int add_at_end(T* data);
int add_after(T* data, T* data_after);
int add_before(T* data, T*data_before);
int add_ordered(T* data);//Insertion triée.
T* is_present(T* data);
bool delete_data(T* data);
bool delete_all(T* data);
private:
struct list
{
T* data;
list* next;
list* prev;
};
list* _head;
list* _tail;
long _count;
};
#endif |
le .cpp:
Code:
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
| #include"FIS_LIST.h"
template< class T >
fis_list<T>::fis_list()
{
_head = NULL;
_tail = NULL;
}
template< class T >
fis_list<T>::~fis_list()
{
}
template< class T >
int fis_list<T>::add_at_head(T *data)
{
list* ele = new list;
if(ele == NULL)
{
if(_debug)
cout<<"Could not create the new element."<<endl;
return 0;//échec.
}
ele->next = _head;
if(_head != NULL)
{
_head->prev = ele;
_tail = ele;
}
ele->next = _head;
ele->prev = NULL;
ele->data = data;
_head = ele;
return 1;
}
template< class T >
int fis_list<T>::add_at_end(T *data)
{
list* ele = new list;
if(ele == NULL)
{
if(_debug)
cout<<"Could not create the new element."<<endl;
return 0;//échec.
}
if(_head == NULL)
{
return add_at_head(data);
}
_tail->next = ele;
ele->next = NULL;
ele->prev = _tail;
ele->data = data;
_tail = ele;
return 1;
}
template< class T >
int fis_list<T>::add_before(T *data, T *data_before)
{
list* ptr = _head;
while(ptr != NULL)
{
if(ptr->data == data_before)
{
list* ele = new list;
if(ele == NULL)
{
if(_debug)
cout<<"Could not create the new element."<<endl;
return 0;//échec.
}
if(ptr->prev == NULL)
{
ele->prev = NULL;
_head = ele;
}
else
{
ele->prev = ptr->prev;
ptr->prev->next = ele;
}
ptr->prev = ele;
ele->next = ptr;
ptr->data = data;
return 1;
}
ptr = ptr->next;
}
return 0;
}
template< class T >
int fis_list<T>::add_after(T *data, T *data_after)
{
list* ptr = _head;
while(ptr != NULL)
{
if(ptr->data == data_after)
{
list* ele = new list;
if(ele == NULL)
{
if(_debug)
cout<<"Could not create the new element."<<endl;
return 0;//échec.
}
if(ptr->next == NULL)
{
ele->next = NULL;
_tail = ele;
}
else
{
ele->next = ptr->next;
ptr->next->prev = ele;
}
ptr->next = ele;
ele->prev = ptr;
ptr->data = data;
return 1;
}
ptr = ptr->next;
}
return 0;
} |
Et bien évidement, ce que me sort le compilateur de VC++ 2005 pro:
Citation:
main.obj : error LNK2019: unresolved external symbol "public: __thiscall fis_list<int>::~fis_list<int>(void)" (??1?$fis_list@H@@QAE@XZ) referenced in function _main
main.obj : error LNK2019: unresolved external symbol "public: __thiscall fis_list<int>::fis_list<int>(void)" (??0?$fis_list@H@@QAE@XZ) referenced in function _main
H:\Projets\BLACK_SCORPION_GHOST\3D_Engine\tools\container_lib\FIS_CONTAINER\Debug\FIS_CONTAINER.exe : fatal error LNK1120: 2 unresolved externals
Someone to help me please :cry:
Voila, merci.