在c++程序中使用to_string时发生编译错误
Compilation error while using to_string in c++ program
为了获得数字的精度和小数位数,我使用了这个简单的程序。但在将数字转换为字符串时,会出现编译错误。
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。
相关文章:
- C++:如何将 unix 时间的字符串转换为 *tm?(使用时间错误:"cannot convert 'String' to 'tm*' ")
- 为什么当我在 std::string 中打开文件名的 fstream 时出现"no matching function"错误?
- 错误消息:使用"string* +="后"no match for 'operator+='"
- 将图形表示为unordered_map<字符串、向量>时拓扑排序错误<string>
- OpenCV 3.4.3 中对 'cv::String::d eallocate()' 错误的未定义引用
- 错误:无法传递非平凡类型"std::string"的对象和更多错误
- 由于矢量引起的错误<string>?
- 错误:调用"es_queue::set_rpc_vector(std::vector >&, std::__cxx11::string)"没有匹配函数
- 错误:"cast"未命名类型void setCastDescription(std::string
- 错误:为"运算符 std::string {aka std::__cxx11::basic_string}"指定的返回类型<char>
- 为什么 std::atomic<std::string> 会给出微不足道的可复制错误?
- pip install uwsgi 失败,出现 /usr/local/include/string/string.h:7:10:致命错误:找不到'sstream'文件?
- 如果子类中没有构造函数方法,则错误"no matching function for call to 'LGame::LGame(String&)'"
- 使用 string::p op_back() 的编译错误
- 错误:请求从"Mstream"转换为非标量类型"std::string {aka std::basic_string<char>}"
- C++ 重载:[错误] 与'operator='不匹配(操作数类型为 'String' 和"字符串")
- 运算符重载返回 std::string <<错误
- VS2015无法从'initializer list'转换为'std::string'错误
- C++枚举[string]错误
- 语法错误:标识符'string'错误 C2061