Bonjour,

J'ai créé une classe template qui encapsule un pointeur avec compteur de reference :

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);
    ...   
}
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
Pointer<MyClass*> pObjet(new MyClass());
if (pObjet != NULL)
{
    ...
}
else
{
    ...
}
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
bool operator!= (T* ptr) const;
bool operator!= (T const* ptr) const;
Avec Visual Studio, ça marche très bien.

Quand j'essaie de compiler mon programme avec mingw, j'ai les erreurs suivantes :

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]
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
bool operator!= (void* ptr) const
bool operator!= (void const* ptr) const
Ou d'autres trucs du genre, mais ça ne passe jamais...

Vous auriez une idée de l'origine du problème ?

Merci !