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