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
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
Le smilley utilise le D de Dispose.

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
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
Est ce quelqu'un saurait me dire ce que je dois faire?

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;
	}
 
 
 
};