1

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

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

任何人都知道为什么同一行在 32 位上编译得很好但在 64 位上编译失败并出现如此高级别的错误?

4

1 回答 1

2

好的,我知道了。问题是 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); }
于 2009-06-02T13:53:47.703 回答