我正在尝试使用Microsoft VisualStudio 2008编译C ++项目。如果您使用Win32作为目标平台,则此特定项目编译良好。如果我尝试为x64平台编译同一个项目,我会在此行中收到C2593 'operator identifier' is ambiguous错误:
case 't': os_ << (size_t)path->rnode->char_type; break;
任何人都有一个线索,为什么同一行编译为32位,但对于64位这样的高级别错误会失败?
答案 0 :(得分:2)
好的,明白了。问题是size_t数据类型,它对于两个不同的平台具有不同的大小。运算符&lt;&lt;是为各种数据类型列表定义的:
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); }