VS2008을 사용하는 이유는 무엇입니까 (2010을 사용할 수 없음).부호없는 __int64 및 __int64를 사용하는 오버로드가 왜 불분명한가
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"버전이 모호하지 않습니다. int
이 암시 적으로 모두 __int64
및unsigned __int64
로 변환 할 수 있기 때문에
코드를 호출해야합니다. 변환 할 유형을 알지 못합니다. 그건 그렇고, 나는 실제 디버그 어설 션을 수행하기 위해 종종 매크로로 변환되기 때문에, 당신의 funtion 이름으로 assert를 사용하는 것을 피할 것이다. – CashCow