Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ to#u字符串不是std的成员,g++;(明)_C++_C++11_G++_Mingw_Tostring - Fatal编程技术网

C++ to#u字符串不是std的成员,g++;(明)

C++ to#u字符串不是std的成员,g++;(明),c++,c++11,g++,mingw,tostring,C++,C++11,G++,Mingw,Tostring,我正在制作一个小的词汇记忆程序,在这个程序中,单词会随机地闪现在我的面前,寻找意义。我想使用标准的C++库,正如Bjarne Stroustroup告诉我们的,但是我遇到了一个看似奇怪的问题。p> 我想将long整数更改为std::string,以便能够将其存储在文件中。我已经为同样的问题使用了to_string()。问题是,当我用g++编译它时(版本4.7.0,如其--‍版本标志),它说: PS C:\Users\Anurag\SkyDrive\College\Programs> g++

我正在制作一个小的词汇记忆程序,在这个程序中,单词会随机地闪现在我的面前,寻找意义。我想使用标准的C++库,正如Bjarne Stroustroup告诉我们的,但是我遇到了一个看似奇怪的问题。p> 我想将
long
整数更改为
std::string
,以便能够将其存储在文件中。我已经为同样的问题使用了
to_string()
。问题是,当我用g++编译它时(版本4.7.0,如其--‍版本标志),它说:

PS C:\Users\Anurag\SkyDrive\College\Programs> g++ -std=c++0x ttd.cpp
ttd.cpp: In function 'int main()':
ttd.cpp:11:2: error: 'to_string' is not a member of 'std'
给出此错误的程序是:

#include <string>

int main()
{
    std::to_string(0);
    return 0;
}
#包括
int main()
{
std::to_字符串(0);
返回0;
}

但是,我知道这不可能,因为它存在msdn库,并且堆栈溢出(对于g++版本4.5)表示可以使用
-std=c++0x
标志打开它。我做错了什么?

这是MinGW下的一个已知错误。在“评论”部分,您可以获得一个与MinGW一起使用的示例


此问题已在MinGW-w64发行版中修复,该发行版高于由提供的GCC 4.8.0。尽管名称不同,该项目提供32位和64位的工具链。也解决了这个问题。

正如所建议的,这可能是编译器版本的问题

尝试使用以下代码将
long
转换为
std::string

#include <sstream>
#include <string>
#include <iostream>

int main() {
    std::ostringstream ss;
    long num = 123456;
    ss << num;
    std::cout << ss.str() << std::endl;
}
#包括
#包括
#包括
int main(){
std::ostringstream ss;
长数=123456;

这也发生在我身上,我只是编写了一个快速函数,而不用担心更新编译器

string to_string(int number){
    string number_string = "";
    char ones_char;
    int ones = 0;
    while(true){
        ones = number % 10;
        switch(ones){
            case 0: ones_char = '0'; break;
            case 1: ones_char = '1'; break;
            case 2: ones_char = '2'; break;
            case 3: ones_char = '3'; break;
            case 4: ones_char = '4'; break;
            case 5: ones_char = '5'; break;
            case 6: ones_char = '6'; break;
            case 7: ones_char = '7'; break;
            case 8: ones_char = '8'; break;
            case 9: ones_char = '9'; break;
            default : ErrorHandling("Trouble converting number to string.");
        }
        number -= ones;
        number_string = ones_char + number_string;
        if(number == 0){
            break;
        }
        number = number/10;
    }
    return number_string;
}
#包括
#包括
命名空间修补程序
{
模板std::字符串到字符串(常量T&n)
{
std::ostringstream stm;
stm使用此功能

    #include<sstream>
    template <typename T>
    std::string to_string(T value)
    {
      //create an output string stream
      std::ostringstream os ;

      //throw the value into the string stream
      os << value ;

      //convert the string stream into a string and return
      return os.str() ;
    }

    //you can also do this
    //std::string output;
    //os >> output;  //throw whats in the string stream into the string
#包括
样板
std::字符串到_字符串(T值)
{
//创建输出字符串流
std::ostringstream os;
//将值抛出到字符串流中
os>output;//将字符串流中的内容抛出到字符串中
to_字符串是Cygwin当前的一个问题 这是一个关于旧线索的新答案。一个新线索确实出现了,但很快就被取消了,

太糟糕了,也许我们会得到一个更新的答案。根据@Alex的说法,Cygwin g++5.2截至2015年11月3日仍无法运行

2015年1月16日,红帽的Cygwin维护人员Corinna Vinschen是newlib的一个缺点。它不支持大多数长双功能,因此不知道C99

红帽是

…仍然希望在 一点

2015年10月25日

如果有一点数学知识的人能 将缺少的长双精度函数贡献给newlib

也许我们当中有一个拥有知识和时间的人能够做出贡献,成为英雄


Newlib是。

事实上libstdc++实际上支持*-w64-mingw32目标中的
std::to_string
。但是,这不包括对MinGW.org、Cygwin和变体的支持(例如,MSYS2中的.-pc-msys)。另请参阅


在为MinGW-w64解决错误之前,我已经实现了。与其他答案中的代码不同,这是对libstdc++的模仿(尽可能)。它不需要字符串流构造,但依赖于libstdc++扩展。即使现在我在Windows上使用MinGW-w64目标,它仍然适用于多个其他目标(只要不使用长双精度
函数)。

如果我们使用模板光解决方案(如上所示),如下所示:

namespace std {
    template<typename T>
    std::string to_string(const T &n) {
        std::ostringstream s;
        s << n;
        return s.str();
    }
}
cpp

以下是解决此问题的一种方法(添加到类型大小中):

名称空间std{
标准::字符串到字符串(大小){
std::ostringstream s;

C++中的C++ C++标准库中的任何一个用户都会问为什么会出现这种错误,这可能是因为你使用了一个错误的C++标准库。尝试将你的构建中的C++库改成“代码”> GuuStLyStase< /C> >代码> C++ +静态< /C> >和CMAKISST.TXT中的C++标准,从<代码> -STD= GNU+11 到<代码> -STD= C++ 11

< P>变更DuAuo。LC++标准

From(编译文件失败)错误:“to_string”不是“std”的成员

-std=c++98

(成功编译文件)

-std=c++11或-std=c++14


GeWangG++(GCC)5.4.0

< P> toStReg()仅在C++ 11中出现,因此如果C++版本较少使用一些替代方法,如<强> SpRtf<<强>或<强> OSTRIGSTROW

< P>在CODBROCK中,转到SETIO->编译器设置>编译器标志> >选择STD C++ 11完成。
我也遇到了同样的问题……现在它开始工作了!

为我确保:

#包括
#包括
使用名称空间std;

在我的文件中,使类似于
to_string(12345)
的东西起作用。

适用于我的GCC 4.4.5(即,给出了一个“模糊重载”错误);也许你的
libstdc++
已经过时了?它使用GCC 4.5.1。这对我来说适用于g++4.6.3。你的错误指的是第11行。你说你的程序“基本上减少到”你的代码,但是你发布的代码也给了那个错误吗?@沃恩卡托-没错,这是精确的程序。我应该编辑它使它更清晰。另外,我在那里做的是什么杂散的int?这对我来说也不起作用,即使我使用GCC 5.3.1。但是,修复它只是使用后来的C++标准——即通过使用旗[COD]编译。e> -std=c++11
或更高版本。我还没有运行它,但感谢您解决了我眼前的难题。现在我只需要弄清楚它是如何工作的。:)请注意,如果您想要
std::string
,您需要使用
.str()
。请注意,对于尾随零,这不是一个精确的解决方案。原始的
std::to_字符串(0.75)
通常会返回
“0.750000”
(默认的sprintf%d格式),而这将返回<
namespace std {
    template<typename T>
    std::string to_string(const T &n) {
        std::ostringstream s;
        s << n;
        return s.str();
    }
}
class A
{
public:

    static const std::size_t x = 10;

    A();
};
A::A()
{
    std::cout << std::to_string(x);
}
CMakeFiles/untitled2.dir/a.cpp.o:a.cpp:(.rdata$.refptr._ZN1A1xE[.refptr._ZN1A1xE]+0x0): undefined reference to `A::x'
collect2: error: ld returned 1 exit status
namespace std {
    std::string to_string(size_t n) {
        std::ostringstream s;
        s << n;
        return s.str();
    }
}