3

プログラムの上部にある宣言に#include(string)がありますが、stoi(string)またはstoll(string)を実行しようとすると、次のエラーが発生します。Cygwin g++v4.5.3を実行しています。

Z:\ G \ CSCE 437> g ++ convert.cpp -o conv convert.cpp:関数void transfer(std::string*)': convert.cpp:103:36: error:内でstoll'はこのスコープで宣言されていませんconvert.cpp:116:35:エラー:`stoi'はこのスコープで宣言されていません

    fileTime[numRec] = stoll(result[0]);    //converts string to Long Long
    if(numRec = 0){
       beginningTime = fileTime[0];
    }
    fileTime[numRec] = timeDiff;
    hostName[numRec] = result[1];
    diskNum[numRec] = stoi(result[2]);
    type[numRec] = result[3];
    offset[numRec] = stoi(result[4]);
    fileSize[numRec] = stoi(result[5]);
    responseTime[numRec] = stoi(result[6]);`

結果は文字列の配列です。

4

1 に答える 1

10

これらの関数はC++11の新機能であり、GCCは、コマンドラインオプションを使用してそのバージョンの言語を指定した場合にのみ使用可能になります-std=c++11(または-std=c++0x一部の古いバージョンでは、バージョン4.5で必要になると思います)。

何らかの理由でC++11を使用できない場合は、文字列ストリームを使用して変換できます。

#include <sstream>

template <typename T> from_string(std::string const & s) {
    std::stringstream ss(s);
    T result;
    ss >> result;    // TODO handle errors
    return result;
}

または、マゾヒスティックな気分の場合は、でstrtoll宣言されているようなC関数を使用し<cstring>ます。

于 2013-01-29T19:12:02.640 に答える