1

文字列配列をパラメーターとして取り、それを int 配列に変換し、新しい配列を返す関数を作成しようとしています。「アトイ」を使えばかなり簡単だと思っていたのですが、どうやら私が試したようには使えないようです。

これまでの私のコードは次のとおりです。

int GameHandler::convertToInt(string array[])
{
    int tmp=0;
    string arr[20]=array;
    int values[20];
    for(int i=0;i<20;i++)
        values[i]=0;

    for(int i=0;i<20;i++)
    {
        tmp=atoi(arr[i]);
        values[i]=tmp;

    }
    return values;
}

コンパイラから取得したエラーメッセージは次のとおりです。

GameHandler.cpp: メンバー関数 'int GameHandler::convertToInt(std::string*)': GameHandler.cpp:60:20: エラー: 'std::string* {aka std::basic_string*}' からの変換非スカラー型 'std::string {aka std::basic_string}' が GameHandler.cpp:67:24 を要求しました: エラー: 'std::string {aka std::basic_string}' を 'const char*' に変換できません引数 '1' から 'int atoi(const char*)' GameHandler.cpp:71:12: エラー: 'int*' から 'int' への無効な変換 [-fpermissive] GameHandler.cpp:61:9: 警告: アドレス返されるローカル変数の「値」の数 [デフォルトで有効]

4

5 に答える 5

2

atoiのサインは

int atoi(const char *str);

したがって、あなたの場合、const char* を atoi に渡す必要があります。

tmp=atoi(arr[i].c_str());
于 2012-10-10T14:21:31.237 に答える
0

const char*の基になるものを 取得する必要がありますstd:string。クラスのc_str()メソッドでそれを行うことができます。std:string

http://www.cplusplus.com/reference/string/string/c_str/

于 2012-10-10T14:21:19.693 に答える
0

あなたのために働くかもしれないのは、(より良い)静的関数を使用したこのソリューションです:

const int ELEM_CNT = 20;
static void convertToInt(string const strings[ELEM_CNT], int ints[ELEM_CNT])
{
  for (int i=0; i<ELEM_CNT; ++i)
    ints[i] = atoi(strings[i].c_str());
}


[...]
string sArr[ELEM_CNT];
int iArr[ELEM_CNT];
convertToInt(sArr, iArr);

次の点に注意してください。

  • int値[20]; // これはスタック上の配列であり、そのメモリは囲んでいるブロック (関数など) の外では使用できません
  • string array[] // サイズが不明な配列。動的サイズ (実行時に設定) の場合、size() メンバー関数によってそのサイズを知る std::vector を使用することをお勧めします。
于 2012-10-10T14:37:29.017 に答える