錯誤無效的轉換我有下面的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'
這個錯誤是什麼意思?
錯誤無效的轉換我有下面的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'
這個錯誤是什麼意思?
positionH[]
是一個數組,它的返回類型是int
。
編譯器不會讓你這樣做。要麼使參數的int:
int findH(int positionH){
return positionH;
}
,或使返回類型的指針爲int:
int* findH(int positionH[]){
return positionH;
}
或陣列返回之前轉換爲整數:
int findH(int positionH[]){
return positionH[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;
}
}
}
}
謝謝了!這真的讓我大開眼界,沒有必要返回價值。 – user1876088
@ user1876088,瞭解更多關於「通過引用傳遞」和「傳遞值」的信息,這將有助於您長期幫助您防止將來的錯誤。 –
@DesertIce,你錯了 - '位置H'不通過引用傳遞在這裏。 –
這行是無效的C++(和無效ç太,其出現在代碼被寫入):
int bla[2] = findH(field, positionH);
BLA是2個元素的數組並且不能以這種方式進行初始化。 findH返回int。
謝謝!我不知道。 – user1876088
再次檢查'findH'的返回類型,並且比較它實際返回的內容以及你試圖分配返回值的內容。 –
findH返回和int,你有int bla [2] – Pavenhimself
「顯然在findH函數中,創建了2維數組positionH??」 - 不,這不是錯誤信息所說的,我不明白你是如何得出這個結論的。 – hvd