为了获得数字的精确度和比例,我正在使用这个简单的程序。但是在将数字转换为字符串时,它会产生编译错误。
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;
}
导致此错误的原因是什么?
答案 0 :(得分:2)
第一个错误是因为std::to_string
是C ++ 11特性,默认情况下GCC在C ++ 03模式下编译。
当您使用正确的标志时,第二个错误可能是,因为GCC 4.4(您似乎正在使用)中对C ++ 11的支持非常小。正如您可以通过错误消息看到的那样,编译器会向您显示它具有的替代方案。
顺便说一句,您不需要将整数文字转换为int
,默认情况下它们的类型为int
。您可能想要将其强制转换为long double
,因为这是有效的重载之一,而您似乎想要找到小数点(如果没有,代码将无法按预期工作字符串中的小数点,就像转换整数时一样。)
答案 1 :(得分:0)
我建议改用boost :: lexical_cast。