错误: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 未在此范围内声明的主要内容,如果未能解决你的问题,请参考以下文章

未在此范围内声明 CvSVM 错误

C++ 错误:未在此范围内声明类/对象

Arduino:错误:“abs”未在此范围内声明

qrand 未在此范围内声明

C++ 错误:“QueryFullProcessImageNameA”未在此范围内声明

错误:`itoa` 未在此范围内声明