首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用数组参数和非数组参数调用重载函数。

使用数组参数和非数组参数调用重载函数。
EN

Stack Overflow用户
提问于 2017-06-15 02:54:23
回答 1查看 189关注 0票数 1

我有一个过载的函数:

代码语言:javascript
复制
CString TestFunction(CString s, int number, int optPar1 = 123, int optPar2 = 456) //...
CString TestFunction(int index, CString s, int numbers[], int optPar1 = 123, int optPar2 = 456) //...
CString TestFunction(CString s, int numbers[], int optPar1 = 123, int optPar2 = 456) //...

当我这么做时:

第一宗案件:

代码语言:javascript
复制
CString s = TestFunction(someString, anArrayOfIntsWithValues);

第二宗案件:

代码语言:javascript
复制
for (int i =0; i < max; i++)
{
    CString s = TestFunction(i, someString, anArrayOfIntsWithValues);
}

它给了我:

关于第一个案件:

代码语言:javascript
复制
error C2664: 'CString Class1::TestFunction(CString, int, int, int)' : cannot convert parameter 2 from 'const int [2]' to 'int'
    5   IntelliSense: no instance of overloaded function "Class1::TestFunction" matches the argument list

关于第二个案件:

代码语言:javascript
复制
Error   2   error C2664: 'CString Class1::TestFunction(CString, int,int,int)' : cannot convert parameter 1 from 'int' to 'CString'
6   IntelliSense: no instance of overloaded function "Class1::TestFunction" matches the argument list

我是C++新手,我不知道这段代码有什么问题,但它是用C#完美编译的(了解重载函数和可选参数)。

注意:这只是一个真实代码的表示-用户定义的类型被用作参数.

编辑:添加了第二个案例,第一个案例已经得到了回答。

EN

回答 1

Stack Overflow用户

发布于 2017-06-15 03:01:10

首先,参数声明int numbers[]实际上与int* numbers相同。然后,

anArrayOfIntsWithValues是一个const int数组,即const int[2];它可以衰减为const int*,但不能隐式转换为intint*,然后调用失败。

如果希望调用第二次重载,可以将anArrayOfIntsWithValues的类型更改为int [2],或者将参数numbers的类型更改为const int[] (或const int*),以使它们匹配。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44557755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档