编译器错误 C2593

“运算符 ”不明确

为重载运算符定义多个可能的运算符。

如果在一个或多个实际参数上使用显式强制转换,则可以修复此错误。

以下示例生成 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 )
}

此错误的原因可能是使用 CArchive 对象序列化浮点变量。 编译器将 << 运算符标识为不明确。 CArchive 可以序列化的唯一基元 C++ 类型是固定大小的类型 BYTEWORDDWORDLONG。 所有整数类型都必须强制转换为这些类型之一进行序列化。 必须使用 CArchive::Write() 成员函数存档浮点类型。

以下示例演示如何将浮点变量 (f) 存档到存档 ar

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