Partager via


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 BYTEde taille fixe , WORD, DWORDet 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 ));