我收到一个错误,说两个重载有类似的转换.我尝试了太多东西但没有帮助.
这是一段代码
CString GetInput(int numberOfInput, BOOL clearBuffer = FALSE, UINT timeout = INPUT_TIMEOUT);
CString GetInput(int numberOfInput, string szTerminationPattern, BOOL clearBuffer = FALSE, UINT timeout = INPUT_TIMEOUT);
我无法理解串怎么可能等于长?
我正在使用Visual C 6(是的,我知道它已经老了,我正在研究遗留代码,所以我很无奈)
编辑:触发错误的代码行是
l_szOption = GetInput(13, FALSE, 30 * 10);
解决方法:
问题是由于您将超时参数作为有符号整数值提供,必须将其转换为函数的第一个版本的无符号整数(因为timeout参数声明为UINT).
即函数的第一个版本需要转换第三个参数,而函数的第二个版本需要转换第二个参数(FALSE,它只是0,转换为字符串).在这种情况下,两个函数都不比另一个好,并且重载决策失败.
尝试显式赋予第三个参数无符号类型
l_szOption = GetInput(13, FALSE, 30U * 10);
要么
l_szOption = GetInput(13, FALSE, (UINT) 30 * 10);
(无论你喜欢哪个)代码应按预期编译.
换句话说,编译器抱怨你的代码是绝对正确的.你的代码确实破了.代码中的问题与下面的简单示例具有完全相同的性质
void foo(int i, unsigned j);
void foo(unsigned i, int j);
int main() {
foo(0, 0);
}
由于完全相同的原因,此代码也无法编译.