2014-02-27 31 views
0

錯誤消息的功能:錯誤呼叫使用指針作爲參數

main.cpp: In function 'int main()': 
main.cpp:39:52: error: expression list treated as compound expression in initializer [-fpermissive] 
    int* concatArray (*pArray1, size1, *pArray2, size2); 
                ^
main.cpp:39:52: error: invalid conversion from 'int' to 'int*' [-fpermissive] 

第39行的我的代碼,其中i調用concat函數;我從來沒有見過這個錯誤,我不知道如何解決它。

#include <iostream> 
#include <cstdlib> 

using namespace std; 

int* concatArray (int* pArray1, int size1, int* pArray2, int size2); 

int main(){ 

    int size1 = 8; 
    int Array1 [size1]; 
    for (int i = 0; i < size1; i++){ 
     Array1[i] = rand() % 10; 
    } 

    int size2 = 10; 
    int Array2 [size2]; 
    for (int i = 0; i < size2; i++){ 
     Array2[i] = rand() % 10; 
    } 

    int* pArray1; 
    int* pArray2; 
    pArray1 = Array1; 
    pArray2 = Array2; 

    cout << "The first array contains: " << endl; 
    for (int i = 0; i < size1; i++){ 
     cout << Array1[i] << endl; 
    } 

    cout << "The second array contains: " << endl; 
    for (int i = 0; i < size2; i++){ 
     cout << Array2[i] << endl; 
    } 

    int* concatArray (*pArray1, size1, *pArray2, size2); 

    cout << "the concat array contains: " << endl; 
    for (int i = 0; i < size1 + size2; i++) { 
     cout << (concatArray + i) << endl; 
    } 
    return 0; 
} 

int* concatArray (int* pArray1, int size1, int* pArray2, int size2){ 

    int* concatArray = new int [size1 + size2]; 
    for (int i = 0; i < size1 + size2; i++) { 
     if(i < size1){ 
      *(concatArray + i) = *(pArray1 + i); 
     } 
     else{ 
      *(concatArray + i) = *(pArray2 + i); 
     } 
    } 
    return concatArray; 
} 
+0

請避免指針和返回分配的內存 –

回答

3
int* concatArray (*pArray1, size1, *pArray2, size2); 

這是得過且過的語法聲明一個變量調用函數。爲避免混淆,您應該爲變量選擇一個不同的名稱,並使用調用該函數的結果對其進行初始化。

這應該修復第一個錯誤;第二個是因爲第一個和第三個參數應該是指針;但是您取消引用指針以獲取它們指向的int值。

所以這應該是這樣的

int* concatenated = concatArray(pArray1, size1, pArray2, size2); 

希望,你很快就會了解爲什麼這是一個壞主意,耍弄這樣的指針,如何解決內存泄漏在你的代碼,以及如何使用圖書館便於管理記憶的設施。但這超出了問題的範圍。

+0

非常感謝你;它與運行時錯誤編譯,但這些很容易修復 - 指針錯誤不是很多(對我來說) – user3358702

+0

@ user3358702你看到別人爲你寫的東西。 –

0

該表達

int* concatArray (*pArray1, size1, *pArray2, size2); 

是無效的。

事實上,它看起來像一個指向int的指針的名字concatArray和一些參數的定義。

此外,如果你的意思是功能concatArray的呼叫,如果你正確地把它寫成

int *SomePointer = concatArray (*pArray1, size1, *pArray2, size2); 

不過其愈傷也是無效的,因爲代替指針傳遞的int類型的參數對象:* pArray1和* pArray2。

考慮到數組的大小應該是C++中的常量表達式。因此,此代碼

int size1 = 8; 
int Array1 [size1]; 
//... 
int size2 = 10; 
int Array2 [size2]; 

不符合C++標準。

而且這個循環的功能

for (int i = 0; i < size1 + size2; i++) { 
    if(i < size1){ 
     *(concatArray + i) = *(pArray1 + i); 
     } 
    else{ 
     *(concatArray + i) = *(pArray2 + i); 
     } 
} 

是無效的。取而代之的

*(concatArray + i) = *(pArray2 + i); 

應該有

*(concatArray + i) = *(pArray2 + i - size1);