ofstream 无法在 linux 上工作

ofstream not working on linux

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

#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 比它给出以下输出:

我用谷歌搜索了这个错误,但没有结果。有人知道如何解决这个问题吗?我在我的项目中使用了很多 ofstreams,我也想在 linux 上编译它。

编辑:多亏了 WinterMute,我现在可以编译它了,但是现在它打印的是空文件。我该如何解决这个问题?

EDIT2:不知道为什么,但第二次编译成功了。谢谢!

使用

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

这个:

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

需要一个 std::ofstream 没有的复制构造函数或仅自 C++11 起可用的移动构造函数。 GCC 4.7 还没有完全支持 C++11,显然这是缺少的功能之一。

在评论中,T.C。提到可移动流直到版本 5 才会出现在 gcc 中,该版本计划于今年发布。这让我感到惊讶,因为 gcc 声称 4.8.1 版完全支持 C++11——这对于编译器来说是正确的,但对于 libstdc++ 则不然。现实叮咬。

所以也许值得一提的是 libc++(一个与 clang 和 llvm 相关的 c++ 标准库实现)实现了可移动的流,以及 clang 3.5 和 gcc 4.9(这些是我在这里尝试过的) ) 如果使用它而不是 libstdc++,则编译原始代码。

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

ofstream 没有复制构造函数。