3

我在程序顶部的声明中包含#include(string),但是当我尝试运行 stoi(string) 或 stoll(string) 时,出现以下错误。我正在运行 Cygwin g++ v4.5.3。

Z:\G\CSCE 437>g++ convert.cpp -o conv convert.cpp: In function void transfer(std::string*)': convert.cpp:103:36: error:stoll' is not declared in this scope convert.cpp:116:35: error: `stoi' was not declared in this scope

    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]);`

其中 result 是一个字符串数组。

4

1 回答 1

10

这些功能是 C++11 中的新功能,只有在您使用命令行选项指定该语言版本-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;
}

或者,如果您感到自虐,可以使用 .c 中strtoll声明的 C 函数<cstring>

于 2013-01-29T19:12:02.640 回答