在c ++程序中使用to_string时编译错误

时间:2013-11-20 08:18:46

标签: c++ tostring

为了获得数字的精确度和比例,我正在使用这个简单的程序。但是在将数字转换为字符串时,它会产生编译错误。

g++ precision.cpp
precision.cpp: In function ‘int main()’:
precision.cpp:6: error: ‘to_string’ was not declared in this scope

当我用-std=c++0x开关编译时,我得到了

g++ precision.cpp  -std=c++0x
precision.cpp: In function ‘int main()’:
precision.cpp:6: error: call of overloaded ‘to_string(int)’ is ambiguous
/usr/lib/gcc/i686-redhat-linux/4.4.4/../../../../include/c++/4.4.4/bits/basic_string.h:2604: note: candidates are: std::string std::to_string(long long int)
/usr/lib/gcc/i686-redhat-linux/4.4.4/../../../../include/c++/4.4.4/bits/basic_string.h:2610: note:                 std::string std::to_string(long long unsigned int)
/usr/lib/gcc/i686-redhat-linux/4.4.4/../../../../include/c++/4.4.4/bits/basic_string.h:2616: note:                 std::string std::to_string(long double)

源代码如下所示:

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string value = to_string(static_cast<int>(1234));
    int precision = value.length();
    int scale = value.length()-value.find('.')-1;
    cout << precision << " " << scale;
    return 0;
}

导致此错误的原因是什么?

2 个答案:

答案 0 :(得分:2)

第一个错误是因为std::to_string是C ++ 11特性,默认情况下GCC在C ++ 03模式下编译。

当您使用正确的标志时,第二个错误可能是,因为GCC 4.4(您似乎正在使用)中对C ++ 11的支持非常小。正如您可以通过错误消息看到的那样,编译器会向您显示它具有的替代方案。

顺便说一句,您不需要将整数文字转换为int,默认情况下它们的类型为int。您可能想要将其强制转换为long double,因为这是有效的重载之一,而您似乎想要找到小数点(如果没有,代码将无法按预期工作字符串中的小数点,就像转换整数时一样。)

答案 1 :(得分:0)

我建议改用boost :: lexical_cast。