Bonjour,
J'ai créé une classe template qui encapsule un pointeur avec compteur de reference :
Afin de pouvoir ecrire dans mon code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 template <class T> class Pointer { private: T* m_ptr; public: Pointer(); Pointer(T* ptr); ... }
J'ai redefinit les opérateurs de comparaison (en tant que membres de la classe) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Pointer<MyClass*> pObjet(new MyClass()); if (pObjet != NULL) { ... } else { ... }
Avec Visual Studio, ça marche très bien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 bool operator!= (T* ptr) const; bool operator!= (T const* ptr) const;
Quand j'essaie de compiler mon programme avec mingw, j'ai les erreurs suivantes :
Du coup j'ai essayé de redefinir d'autres opérateurs de comparaison (en tant que membres de la classe) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 error: ambiguous overload for 'operator!=' in 'pObjet != 0' note: candidates are: operator!=(const MyClass*, const MyClass*) <built-in> note: operator!=(MyClass*, MyClass*) <built-in> note: bool Pointer<T>::operator!=(T*) const [with T = MyClass] note: bool Pointer<T>::operator!=(const T*) const [with T = MyClass]
Ou d'autres trucs du genre, mais ça ne passe jamais...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 bool operator!= (void* ptr) const bool operator!= (void const* ptr) const
Vous auriez une idée de l'origine du problème ?
Merci !
Partager