【发布时间】:2012-02-16 21:59:39
【问题描述】:
用VS2008,为什么会这样(2010不允许用)。
void assert(int exp, int actual) {if (exp!=actual) printf("assert failed\n");}
void assert(unsigned int exp, unsigned int actual) {if (exp!=actual) printf("assert failed\n");}
但这是模棱两可的。
void assert(__int64 exp, __int64 actual) {if (exp!=actual) printf("assert failed\n");}
void assert(unsigned __int64 exp, unsigned __int64 actual) {if (exp!=actual) printf("assert failed\n");}
错误文本示例
d:\my documents\visual studio 2008\projects\classtest\classtest\classtest.cpp(31) : error C2668: 'assert' : ambiguous call to overloaded function
d:\my documents\visual studio 2008\projects\classtest\classtest\classtest.cpp(12): could be 'void assert(unsigned __int64,unsigned __int64)'
d:\my documents\visual studio 2008\projects\classtest\classtest\classtest.cpp(10): or 'void assert(__int64,__int64)'
while trying to match the argument list '(int, int)'
它只会在“无符号”重载方面变得模棱两可。有一个“int”版本和一个“__int64”版本是没有歧义的。
【问题讨论】:
-
我们需要查看调用它的代码。它不知道要转换为哪种类型。顺便说一句,我会避免使用 assert 作为您的函数名称,因为它通常会被转换为宏来执行实际的调试断言。
标签: visual-c++ overloading unsigned-long-long-int