编译x64平台时出现c2593错误(操作员标识符不明确)

时间:2009-06-02 13:41:30

标签: c++ 64-bit compiler-errors msdev

我正在尝试使用Microsoft VisualStudio 2008编译C ++项目。如果您使用Win32作为目标平台,则此特定项目编译良好。如果我尝试为x64平台编译同一个项目,我会在此行中收到C2593 'operator identifier' is ambiguous错误:

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

任何人都有一个线索,为什么同一行编译为32位,但对于64位这样的高级别错误会失败?

1 个答案:

答案 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); }