Ошибка c2593 (идентификатор оператора неоднозначен) при компиляции для платформы x64 - PullRequest
1 голос
/ 02 июня 2009

Я пытаюсь скомпилировать проект C ++, используя Microsoft VisualStudio 2008. Этот конкретный проект прекрасно компилируется, если вы используете Win32 в качестве целевой платформы. Если я пытаюсь скомпилировать тот же проект для платформы x64, я получаю C2593 «идентификатор оператора» с неоднозначной ошибкой в этой строке:

case 't':  os_ << (size_t)path->rnode->char_type;     break;

Кто-нибудь знает, почему одна и та же строка прекрасно компилируется для 32-битной, но не работает для 64-битной с такой высокой ошибкой уровня?

1 Ответ

2 голосов
/ 02 июня 2009

Хорошо, понял. Проблема заключается в типе данных size_t, который имеет разные размеры для двух разных платформ. Оператор << определен для различного списка типов данных: </p>

StringBuffer& operator<<(unsigned short int n) { _UITOA(n); }
StringBuffer& operator<<(unsigned int n)       { _UITOA(n); }

На 32-битной платформе "unsigned int" идеально подходит для size_t. На 64-битных платформах size_t равен 64 битам и не совпадает точно ни с одним объявлением оператора.

Решение состоит в том, чтобы выбрать точного оператора, используя правильный тип данных:

case 't':  os_ << (unsigned int)path->rnode->char_type;     break;

Или перегрузить оператор с помощью size_t:

StringBuffer& operator<<(size_t)       { _UITOA(n); }
...