错误:to_string 未在此范围内声明
Posted
技术标签:
【中文标题】错误:to_string 未在此范围内声明【英文标题】:error : to_string was not declared in this scope 【发布时间】:2017-11-01 11:23:13 【问题描述】:我在 solaris 5.11 上编译代码。 G++版本是4.8.2。
相同的代码可以在 Ubuntu 上运行,但会出现错误:在 solaris 上,“to_string() 未在此范围内声明”。
我浏览了许多链接并尝试了以下操作:
-
在 to_string() 之前添加“std::”。这给出了错误 - 'to_string 不是 std 的成员'
在编译时添加了“std=c++11”或“std=c++0x”。
以上两点都不行。
有什么与 Solaris 相关的吗?
实际代码非常庞大。所以在下面的示例代码中模拟错误。
温度.cpp
#include<iostream>
#include<string>
using namespace std;
int main()
string str;
int i = 10;
str = "john age is " + to_string(i);
cout << str;
return 0;
命令:g++ temp.cpp -std=c++0x -o temp
【问题讨论】:
向我们展示代码。 @steve 请参考上面的代码 【参考方案1】:对于 GCC 4.8.2,to_string
函数是根据以下条件有条件地定义的:
#if ((__cplusplus >= 201103L) && defined(_GLIBCXX_USE_C99) \
&& !defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF))
GLIBCXX_USE_C99
宏依赖于操作系统支持的大量 C99 函数,因此在 Solaris 上构建 GCC 时可能找不到必要的 C99 库函数。所以to_string
定义不存在。
在当前版本的 GCC 中,条件更细粒度,并检查 C99 函数是否在 C++98 模式和 C++11 中定义,因此没有任何 C99 函数不会禁用所有内容:
#if __cplusplus >= 201103L
//...
#if _GLIBCXX_USE_C99_STDIO
无法将这些改进向后移植到 GCC 4.8,因此您可能需要至少更新到 GCC 6。
【讨论】:
【参考方案2】:使用 std=c++11 编译如下
g++ -std=c++11 文件名.cc
注意:你的编译器必须支持c++11
【讨论】:
以上也不起作用。编译器支持 c++11。我检查了 __cplusplus 值,它是 201103L。以上是关于错误:to_string 未在此范围内声明的主要内容,如果未能解决你的问题,请参考以下文章