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

时间:2017-06-15 02:54:23

标签: c++ arrays overloading overload-resolution

我有这个重载的功能:

var token = $('input[name="__RequestVerificationToken"]', form).val();
$.ajax({
      type: "POST",
      url: newurl,
      beforeSend: function (request)
      {
         request.setRequestHeader("__RequestVerificationToken", token);
      },
      data: form.serialize(),
      datatype: "JSON",
      success: function..,
      error: function..
})

当我这样做时:

第一案:

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

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

注意:这只是实际代码的表示 - 用户定义的类型用作参数。

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

1 个答案:

答案 0 :(得分:2)

首先,参数声明html, body, #map { height: 100%; width: 100%; margin: 0px; padding: 0px }实际上与<script src="https://maps.googleapis.com/maps/api/js?libraries=geometry"></script> <div id="map"></div>相同。然后,

int numbers[]int* numbers的数组,即anArrayOfIntsWithValues;它可能会衰减到const int,但无法隐式转换为const int[2]const int*,然后调用失败。

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