Bonjour,
Je tourne en rond depuis plusieurs heures sans trouver la solution. Je n'arrive pas à compiler le morceau de code ci-dessous
J'utilise g++ 4.0.1 et voici l'erreur que j'ai. Je n'ai actuellement pas la possibilité de tester avec un autre compilateur.
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 #include <tr1/memory> class A {}; using ::std::tr1::shared_ptr; template <class T> struct Deleter { void operator()(T *t) { delete t; } }; template <class T> Deleter<T> *deleter(const shared_ptr <T> & p) { return std::tr1::get_deleter<Deleter<T> >(p); } int main () { shared_ptr <A> p (new A, Deleter<A>()); Deleter<A> *d1 = std::tr1::get_deleter<Deleter<A> >(p); assert(d1); Deleter<A> *d2 = deleter<A>(p); assert(d2); return 0; }
Le problème que je vois est que get_deleter est une fonction template amie de shared_ptr mais je ne sais pas comment m'en sortir. Je suis juste arrivé à un moment à compiler avec
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 g++ -Wall -pedantic -o memory memory.cpp memory.cpp: In function 'Deleter<T>* deleter(const std::tr1::shared_ptr<_Tp>&)': memory.cpp:16: error: 'get_deleter' is not a member of 'std::tr1' memory.cpp:16: error: expected primary-expression before '>' token
mais je n'avais pas encore mis dans le main les lignes avec d2.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 return std::tr1::shared_ptr<T>::template get_deleter<Deleter<T> >(p);
Si quelqu'un a une idée, il est le bienvenu. Merci d'avance,
Partager