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

Compilation error while using to_string in c++ program

本文关键字:string 错误 编译 to 程序 c++      更新时间:2023-10-16

为了获得数字的精度和小数位数,我使用了这个简单的程序。但在将数字转换为字符串时,会出现编译错误。

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;
}

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

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

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

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

我建议改用boost::lexical_cast。

相关文章: