8

我收到以下错误:
prog.cpp: In member function 'void Sequence::GetSequence()':
prog.cpp:45: error: 'itoa' was not declared in this scope

我已经包含 cstdlib 头文件,但它不起作用。

#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <algorithm>
#include <functional>
using namespace std;

template<typename T>
struct predicate :
public binary_function<T, T, bool>
{
    bool operator() (const T& l,const T &r) const
    {
          return l < r;
    }
};

class Sequence
{
    public:
    Sequence(vector<string> &v)
    { /* trimmed */ }

void GetSequence(void)
{
    string indices = "";
    char buf[16];

    for( map<int, string>::iterator
            i = m.begin(); i != m.end(); ++i )
    {
indices = indices
                  + string(itoa((i->first), buf, 10));
    }

    SortedSequence("", indices);
}

// --- trimmed ---
4

3 回答 3

14

标准中没有itoa,但在 C++11 中,您可以使用std::to_string函数。

于 2012-06-16T12:32:59.063 回答
7

在 C++11 中,您可以使用std::to_string. 如果这对您不可用,您可以使用std::stringstream

std::stringstream ss; int x = 23;
ss << x;
std::string str = ss.str();

如果这太冗长,则有boost::lexical_cast。有一些关于 and 的性能的抱怨lexical_caststd::stringstream所以请注意这对您是否重要。

另一种选择是使用Boost.Karma,一个 Spirit 的子库。它在大多数基准测试中都领先。

通常,itoa这是一个坏主意。它既不是 C 也不是 C++ 标准的一部分。您可以注意识别支持它的平台并有条件地使用它,但是当有更好的解决方案时,为什么要这样做。

于 2012-06-16T12:42:57.770 回答
3

我发现至少在 4.9.3 之前在MinGWitoa GCC 中不可用,但在MinGW-w64 GCC 5.3.0中可用。

它猜测它的缺失与损坏的 vswprintf问题有关,这也导致了 MinGW 的丢失std::stoi和丢失。std::to_string

于 2016-07-02T19:13:39.547 回答