1

我有這個重載函數:調用重載函數與陣列參數和非陣列參數

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

它g艾夫斯我:

在第一種情況:

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#編譯(瞭解重載函數和可選參數)。

注意:這只是真實代碼的表示 - 用戶定義類型用作參數。

編輯:增加了第二例和第一例已被回答。

+0

請注意,在參數列表中使用'[]'是古老的,實際上數組不是通過值傳遞。如果您來自其他語言,這可能與您的期望有所不同 –

回答

3

首先,參數聲明int numbers[]實際上與int* numbers相同。然後,

anArrayOfIntsWithValuesconst int的數組,即const int[2];可能衰減到const int*,但不能隱式轉換爲intint*,則調用失敗。

如果你想調用的第二個過載,你可以改變的anArrayOfIntsWithValues類型int [2],或更改參數numbers的類型const int[](或const int*),使它們相匹配。