Bonjour,
J'utilise visual studio 2008 pro.
J'ai cod� une classe fifo_prod_cons en template.
Elle ne me pose pas de souci si je l'utilise avec "fifo_prod_cons<std::string> queue;" ou avec "fifo_prod_cons<int> ^ queue;", mais lorsque je fais "fifo_prod_cons<std::string> ^ queue;", le compilo me donne l'erreur
Le smilley utilise le D de Dispose.1>2_synchr.obj : error LNK2020: jeton non r�solu (06000108) fifo_prod_cons<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >:ispose
1>2_synchr.obj : error LNK2020: jeton non r�solu (06000109) fifo_prod_cons<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >:ispose
D'apr�s ce que j'ai vu sur internet, Dispose est une m�thode appell�e dans le destructeur, mais je n'ai pas trouv� comment l'impl�menter et je ne suis d'ailleur pas s�r que cela soit autoris�, puisque si je rajoute "void Dispose(){};" comme m�thode de fifo_prod_cons, le compilo me donne l'erreur
Est ce quelqu'un saurait me dire ce que je dois faire?fifo_prod_cons.h(57) : error C2605: 'Dispose'*: cette m�thode est r�serv�e dans une classe manag�e
1> souhaitez-vous d�finir un destructeur*?
1> \fifo_prod_cons.h(60)*: voir la r�f�rence � l'instanciation de la classe mod�le 'fifo_prod_cons<T>' en cours de compilation
voici le code de ma classe:
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 #using <System.dll> using namespace System; using namespace System::Threading; #include "queue_pool.h" template<typename T> ref class fifo_prod_cons { private: Mutex^ mutex_de_queue; Semaphore ^ nb_elements_ds_queue; Semaphore ^ nb_places_libres_ds_queue; public: queue_pool<T>* p_queue_pool; // car on peut avoir un pointeur vers un objet non managé mais pas un objet non managé dans une classe managé fifo_prod_cons(){ p_queue_pool = new queue_pool<T>; mutex_de_queue = gcnew Mutex; nb_elements_ds_queue = gcnew Semaphore(0,INT_MAX); nb_places_libres_ds_queue = gcnew Semaphore(INT_MAX,INT_MAX); }; ~fifo_prod_cons(){}; T pop(){ T res; nb_elements_ds_queue->WaitOne(); mutex_de_queue->WaitOne(); res = p_queue_pool->pop(); mutex_de_queue->ReleaseMutex(); nb_places_libres_ds_queue->Release(); return res; }; void push(T t){ nb_places_libres_ds_queue->WaitOne(); mutex_de_queue->WaitOne(); p_queue_pool->push(t); mutex_de_queue->ReleaseMutex(); nb_elements_ds_queue->Release(); }; bool empty(){ bool res; mutex_de_queue->WaitOne(); res = p_queue_pool->empty(); mutex_de_queue->ReleaseMutex(); return res; } };
Partager