2012-12-04 66 views
1

錯誤無效的轉換我有下面的C++代碼:C++,從'INT * '到'廉政'

#include <iostream> 
using namespace std; 
int main(){ 
} 
int findH(int positionH[]){ 
    return positionH;   //error happens here. 
} 

編譯器會引發錯誤:

invalid conversion from `int*' to `int' 

這個錯誤是什麼意思?

+1

再次檢查'findH'的返回類型,並且比較它實際返回的內容以及你試圖分配返回值的內容。 –

+1

findH返回和int,你有int bla [2] – Pavenhimself

+3

「顯然在findH函數中,創建了2維數組positionH??」 - 不,這不是錯誤信息所說的,我不明白你是如何得出這個結論的。 – hvd

回答

2

positionH[]是一個數組,它的返回類型是int

編譯器不會讓你這樣做。要麼使參數的int:

int findH(int positionH){ 
    return positionH;   
} 

,或使返回類型的指針爲int:

int* findH(int positionH[]){ 
    return positionH;   
} 

或陣列返回之前轉換爲整數:

int findH(int positionH[]){ 
    return positionH[0]; 
} 
0

的錯誤是由於您返回了一個指針而引起的,編譯器期望得到一個int。

int *和int之間存在非常大的差異。

此外,爲什麼你返回positionH,數組通過引用傳遞,沒有必要返回它。

更好的代碼將是

void option1(char** field, int[]) 
    { 
    int findH(char **, int[]); 
    int positionH[2]; 
    findH(field, positionH); 
     //positionH passed by reference, no need to return it 
    } 

void findH(char **field, int positionH[]) 
{ 
    for(int n = 0;n < 14 ; n++) 
    { 
     for(int m = 0; m < 14; m++) 
     { 
        if(field[m][n] == 'H') 
        { 

        positionH[0] = n; 
        positionH[1] = m; 

     } 
     } 
    } 

} 
+0

謝謝了!這真的讓我大開眼界,沒有必要返回價值。 – user1876088

+0

@ user1876088,瞭解更多關於「通過引用傳遞」和「傳遞值」的信息,這將有助於您長期幫助您防止將來的錯誤。 –

+0

@DesertIce,你錯了 - '位置H'不通過引用傳遞在這裏。 –

2

這行是無效的C++(和無效ç太,其出現在代碼被寫入):

int bla[2] = findH(field, positionH); 

BLA是2個元素的數組並且不能以這種方式進行初始化。 findH返回int。

+0

謝謝!我不知道。 – user1876088

相關問題