Error del compilador C2593

"operator identifier" es ambiguo

Observaciones

Hay más de un operador definido para un operador sobrecargado.

Este error puede corregirse si usa una conversión explícita en uno o varios parámetros reales.

Ejemplos

En el ejemplo siguiente se genera la advertencia 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 )
}

Este error puede deberse a la serialización de una variable de punto flotante con un objeto CArchive. El compilador identifica el operador << como ambiguo. Los únicos tipos primitivos de C++ que CArchive puede serializar son los tipos de tamaño fijo BYTE, WORD, DWORD y LONG. Todos los tipos enteros deben convertirse en uno de estos tipos para la serialización. Los tipos de punto flotante deben archivarse con la función miembro CArchive::Write().

El ejemplo siguiente muestra cómo archivar una variable de punto flotante (f) para archivar ar:

ar.Write(&f, sizeof( float ));