【问题标题】:Centos7 g++ "to_string is not in a member of std"Centos7 g++“to_string不在std的成员中”
【发布时间】:2020-05-19 16:38:16
【问题描述】:

我有一些非常标准的 C++ 代码,我在其中使用 to_string 将 sting 和 int 添加在一起,如下所示:

#include <string>
using namespace std;

class Color{
public:
    int red, blue, green;

    Color(int r, int g, int b){
        red = r;
        green = g;
        blue = b;
    }

    string to_string(){
        string color = "(" + std::to_string(red) + ", " + std::to_string(green) + ", " + std::to_string(blue) + ")";
        return color;
    }

    string colorize(string text){
        string styled = "\033[38;2"+std::to_string(red)+";"+std::to_string(green)+";"+std::to_string(blue)+";177m"+"\n"+text+"\n"+"\033[0m";
        return styled;
    }

};

当我尝试在 Centos7 上使用 g++ 编译它时,我收到错误“to_string is not in a member of std”。我需要做什么?为什么这不起作用?我正在运行构建命令g++ main.cpp

我正在运行 gcc 版本 4.8.5

【问题讨论】:

  • 您使用的是哪个版本的 GCC?
  • @NutCracker 不管最新版本是什么,我刚刚重新安装并运行了完整更新
  • @Laif 你是否包含了-std=c++11 标志?
  • 这与这里描述的问题甚至不接近,@M.M.所描述的问题是他们有一些他们认为有效的 C++ 代码,但它没有编译。这几乎是编程问题的缩影。此外,即使问题是一个混乱的工具链,这仍然是这里的主题,而不是超级用户。
  • @Laif 你还没有发布你的构建命令和g++ -v的输出

标签: c++ gcc g++


【解决方案1】:

我相信您缺少的是编译器标志 -std=c++11,因为在 C++11 版本的标准中引入了 std::to_string

在旧版本的 GCC 中,您可以将 -std=c++0x 用于 C++11 或 -std=c++1y 用于 C++14。

【讨论】:

  • 第二行有效,但我不知道为什么要运行旧版本,但我根本不明白yum update 做了什么。我正在运行 v4.8.5。为什么不更新?
  • @Laif 我相信这是因为 CentOS 7 存储库中的默认 GCC 版本是 4.8.5。这就是它不更新的原因。我建议您通过从源代码构建它来更新 GCC。
  • yum update 从 CentOS 软件库安装较新的软件包。如果 gcc 4.8.5 是存储库中的最新版本(它是),那么这就是你得到的。如果您不想要有几年历史的软件包,请使用比 CentOS 7 更新的软件。例如,现在可以使用 CentOS 8。如果您必须继续使用 CentOS 7,请考虑安装 devtoolset-8-gcc-c++ 软件包,它可以提供更新的 GCC。
猜你喜欢
  • 2012-10-10
  • 2013-10-07
相关资源
最近更新 更多