5

次の C++ コードがあります。

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

コンパイラはエラーをスローします:

invalid conversion from `int*' to `int'

このエラーはどういう意味ですか?

4

4 に答える 4

6

positionH[]は配列であり、その戻り型はintです。

コンパイラはそれを許可しません。パラメータをintにします。

int findH(int positionH){
    return positionH;        
}

または、戻り型をintへのポインタにします。

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

または、返す前に配列を整数に変換します。

int findH(int positionH[]){
    return positionH[0];
}
于 2012-12-04T15:22:56.067 に答える
2

この行は無効な C++ です (コードが記述されているように見える無効な C も):

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

bla は 2 つの要素の配列であり、そのように初期化することはできません。findH は int を返します。

于 2012-12-04T15:45:32.413 に答える
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;

        }
         }
    }

}
于 2012-12-04T15:23:50.517 に答える