Поделиться через


Ошибка компилятора 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 объекта. Компилятор определяет << оператор как неоднозначный. Единственными примитивными типами C++, которые CArchive могут сериализоваться, являются типы BYTEфиксированного размера , WORDDWORDиLONG. Все целые типы должны быть приведены к одному из этих типов для сериализации. Типы с плавающей запятой должны архивироваться с помощью CArchive::Write() функции-члена.

В следующем примере показано, как архивировать переменную с плавающей запятой (f) для архивации ar:

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