次の C++ コードがあります。
#include <iostream>
using namespace std;
int main(){
}
int findH(int positionH[]){
return positionH; //error happens here.
}
コンパイラはエラーをスローします:
invalid conversion from `int*' to `int'
このエラーはどういう意味ですか?
次の C++ コードがあります。
#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];
}
この行は無効な C++ です (コードが記述されているように見える無効な C も):
int bla[2] = findH(field, positionH);
bla は 2 つの要素の配列であり、そのように初期化することはできません。findH は int を返します。
このエラーは、ポインターを返し、コンパイラーが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;
}
}
}
}