Erreur du compilateur C2593
'operator identifier' est ambigu
Plusieurs opérateurs possibles sont définis pour un opérateur surchargé.
Cette erreur peut être corrigée si vous utilisez un cast explicite sur un ou plusieurs paramètres réels.
L’exemple suivant génère l’erreur C2593 :
// C2593.cpp
struct A {};
struct B : A {};
struct X {};
struct D : B, X {};
void operator+( X, X );
void operator+( A, B );
D d;
int main() {
d + d; // C2593, D has an A, B, and X
(X)d + (X)d; // OK, uses operator+( X, X )
}
Cette erreur peut être due à la sérialisation d’une variable à virgule flottante à l’aide d’un CArchive
objet. Le compilateur identifie l’opérateur <<
comme ambigu. Les seuls types primitifs C++ qui CArchive
peuvent sérialiser sont les types BYTE
de taille fixe , WORD
, DWORD
et LONG
. Tous les types entiers doivent être convertis en un de ces types pour la sérialisation. Les types à virgule flottante doivent être archivés à l’aide de la CArchive::Write()
fonction membre.
L’exemple suivant montre comment archiver une variable à virgule flottante (f
) à archiver ar
:
ar.Write(&f, sizeof( float ));