首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >错误: to_string未在此范围内声明

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

Stack Overflow用户
提问于 2017-11-01 11:23:13
回答 2查看 5.3K关注 0票数 2

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

相同的代码在Ubuntu上工作,但给出了错误: solaris上没有在此作用域中声明to_string()。

我浏览了许多链接,并尝试了以下几点:

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

上述两件事都行不通。

有和Solaris有关的事吗?

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

temp.cpp

代码语言:javascript
运行
复制
#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

EN

回答 2

Stack Overflow用户

发布于 2017-11-01 11:45:28

GCC 4.8.2有条件地定义了to_string函数,具体如下:

代码语言:javascript
运行
复制
#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函数并不会禁用所有功能:

代码语言:javascript
运行
复制
#if __cplusplus >= 201103L
//...
#if _GLIBCXX_USE_C99_STDIO

这是不可能支持这些改进GCC 4.8,所以你可能需要更新到至少GCC 6。

票数 4
EN

Stack Overflow用户

发布于 2017-11-01 11:53:02

使用std=c++11编译如下

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47053711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档