在Linux上ofstream无法工作

3

我有一段简单的测试代码:

#include <string>
#include <iostream>
#include <fstream>

int main() {
std::ofstream strm = std::ofstream("test.txt");
strm << "TEST123";
strm.close();
return 0;
}

如果我在Windows上编译它,它就能完美运行。但是当我用以下命令在Debian上编译它时: g++-4.7 -std=c++0x -lpthread TestStream.cpp -ldl -o TestStream 然后它会输出以下内容: enter image description here 我已经谷歌了这个错误,但没有结果。有人知道如何解决吗?我在我的项目中使用了很多ofstream,并且想在Linux上编译它。
编辑:现在我已经通过WinterMute的帮助将其编译出来了,但现在它打印空文件。我该怎么办?
编辑2:不知道为什么,但第二次编译它就正常了。谢谢!

2
你知道,发布图片而不是纯文本其实没有什么必要... - Deduplicator
1
@Deduplicator 如果文本不容易复制,则存在if条件。 - WillieWonka
1
那么,你的控制台无法复制粘贴,但截屏却可以?很奇怪的设置,我没想到Linux会有这样的情况... - Deduplicator
@Deduplicator,这就是叫做Windows和Putty的东西哈哈。 - WillieWonka
2
你可以使用鼠标从putty中复制粘贴。请参阅http://the.earth.li/~sgtatham/putty/0.52/htmldoc/Chapter3.html。 - Wintermute
显示剩余2条评论
2个回答

12

使用

std::ofstream strm("test.txt");

这个:
std::ofstream strm = std::ofstream("test.txt");

需要一个拷贝构造函数,而std::ofstream没有此函数,或者需要使用自C++11起才可用的移动构造函数。GCC 4.7尚未完全支持C++11,显然这是其中的一个缺失功能。

在评论中,T.C.提到可移动流要到gcc 5版本才会推出,计划于今年发布。这让我感到惊讶,因为gcc声称从4.8.1版本开始具有完整的C++11支持——对于编译器来说是真的,但对于libstdc++库则不是如此。实际情况很残酷。

因此,值得一提的是,libc++(与clang和llvm相关的C++标准库实现)实现了可移动流,并且如果使用它而不是libstdc++,那么clang 3.5和gcc 4.9(这些是我这里试过的版本)都可以编译原始代码。


7
因为微软希望你编写的代码只能在Windows上编译和运行。 - Sam Varshavchik
3
我很喜欢人们在GCC/libstdc++不兼容时喜欢抨击Microsoft的方式。std::ofstream strm = std::ofstream("test.txt");需要一个可访问的复制或移动构造函数。std::ofstream是可移动的,代码应该可以编译。但是libstdc++没有实现可移动流。 - T.C.
1
这不是Linux的“问题”。 - Sam Varshavchik
2
@Wintermute,该网站所提到的是对C++11语言特性的全面支持,并不是完整的标准库实现。GCC主干中的库已经完整,只有unicode codecvt facets 和 wstring_convert 以及 wbuffer_convert 还未完成,但4.8版本的状态可以在https://gcc.gnu.org/onlinedocs/gcc-4.8.4/libstdc++/manual/manual/status.html#status.iso.2011 上查看。 - Jonathan Wakely
1
C++11状态页面不涵盖任何库功能,https://gcc.gnu.org/projects/cxx0x.html说:“库实现的状态可以在此[表格](https://gcc.gnu.org/onlinedocs/gcc-4.8.4/libstdc++/manual/manual/status.html#status.iso.2011)中跟踪”。 - Jonathan Wakely
显示剩余10条评论

0
std::ofstream strm = std::ofstream("test.txt");

ofstream 没有拷贝构造函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接