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