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"バージョンを持つことはあいまいではありません。
呼び出すコードを確認する必要があります。どのタイプに変換するのかはわかりません。ところで、実際のデバッグアサートを実行するためにマクロに変換されることが多いため、あなたの関数名としてassertを使用することは避けています。 – CashCow