Ошибка c2593 (идентификатор оператора неоднозначен) при компиляции для платформы x64
Я пытаюсь скомпилировать проект C++ с использованием Microsoft VisualStudio 2008. Этот конкретный проект прекрасно компилируется, если вы используете Win32 в качестве целевой платформы. Если я пытаюсь скомпилировать тот же проект для платформы x64, я получаю C2593 'идентификатор оператора', это неоднозначная ошибка в этой строке:
case 't': os_ << (size_t)path->rnode->char_type; break;
Кто-нибудь знает, почему одна и та же строка прекрасно компилируется для 32-битной, но не работает для 64-битной с такой высокой ошибкой уровня?
1 ответ
Хорошо понял. Проблема заключается в типе данных size_t, который имеет разные размеры для двух разных платформ. Оператор << определен для различного списка типов данных:
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); }