ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

C函数重载类似转换

2019-07-24 03:05:24  阅读:244  来源: 互联网

标签:ambiguity c overloading


我收到一个错误,说两个重载有类似的转换.我尝试了太多东西但没有帮助.

这是一段代码

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);
}

由于完全相同的原因,此代码也无法编译.

标签:ambiguity,c,overloading
来源: https://codeday.me/bug/20190724/1519331.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有