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:
le .cpp:
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
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
Et bien évidement, ce que me sort le compilateur de VC++ 2005 pro:
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
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; }
Someone to help me pleasemain.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
Voila, merci.
Partager