C++ to#u字符串不是std的成员,g++;(明)
我正在制作一个小的词汇记忆程序,在这个程序中,单词会随机地闪现在我的面前,寻找意义。我想使用标准的C++库,正如Bjarne Stroustroup告诉我们的,但是我遇到了一个看似奇怪的问题。p> 我想将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++
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();
}
}