【发布时间】:2017-06-15 02:54:23
【问题描述】:
我有这个重载函数:
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) //...
当我这样做时:
第一种情况:
CString s = TestFunction(someString, anArrayOfIntsWithValues);
第二种情况:
for (int i =0; i < max; i++)
{
CString s = TestFunction(i, someString, anArrayOfIntsWithValues);
}
它给了我:
第一种情况:
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
第二种情况:
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# 中完美编译(具有重载函数和可选参数的知识)。
注意:这只是真实代码的表示——用户定义的类型被用作参数。
编辑:添加了第二种情况,第一种情况已经得到解答。
【问题讨论】:
-
请注意,在参数列表中使用
[]是过时的,实际上数组不是按值传递的。因此,如果您来自其他语言,这可能与您的预期不同
标签: c++ arrays overloading overload-resolution