繁体   English   中英

错误:未在此范围内声明to_string

[英]error : to_string was not declared in this scope

我正在编译solaris 5.11上的代码。 G ++版本是4.8.2。

相同的代码可在Ubuntu上使用,但会出现错误:在solaris上未在此范围内声明“ to_string()”。

我浏览了许多链接并尝试了以下操作:

  1. 在to_string()之前添加“ std ::”。 这给出了错误-'to_string不是std的成员'
  2. 编译时添加了“ std = c ++ 11”或“ std = c ++ 0x”。

以上两种方法均无效。

是否与Solaris有关?

实际的代码非常庞大。 因此,在下面的示例代码中模拟错误。

temp.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

对于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。

使用std = c ++ 11进行编译,如下所示

g ++ -std = c ++ 11 filename.cc

注意:您的编译器必须支持c ++ 11

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM