代码之家  ›  专栏  ›  技术社区  ›  Eduard Wirch

为x64平台编译时出现C2593错误(运算符标识符不明确)

  •  1
  • Eduard Wirch  · 技术社区  · 17 年前

    我试图用微软VisualStudio 2008编译一个C++项目。如果将win32用作目标平台,则此特定项目编译良好。如果我尝试为X64平台编译相同的项目,我会得到一个 C2593 'operator identifier' is ambiguous 此行出错:

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

    有人知道为什么同一行的32位编译很好,但64位编译失败,并且有如此高的级别错误吗?

    1 回复  |  直到 17 年前
        1
  •  2
  •   Eduard Wirch    17 年前

    好的,明白了。问题是大小数据类型对于两个不同的平台具有不同的大小。运算符<<是为各种数据类型列表定义的:

    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;
    

    或使用尺寸t超载操作员:

    StringBuffer& operator<<(size_t)       { _UITOA(n); }
    
    推荐文章