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 比它给出以下输出: 在此处输入图像描述

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

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

EDIT2:不知道为什么,但第二次编译它工作。谢谢!

4

2 回答 2

12

利用

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

这个:

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

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

在评论中,TC 提到在计划于今年发布的版本 5 之前,可移动流不会出现在 gcc 中。这让我感到意外,因为 gcc 声称在 4.8.1 版本中完全支持 C++11——这对于编译器是正确的,但对于 libstdc++ 则不然。眼见为实。

所以值得一提的是,libc++(一个附属于 clang 和 llvm 的 c++ 标准库实现)实现了可移动的流,并且 clang 3.5 和 gcc 4.9(那些是我在这里尝试过的)编译原始代码如果它被使用而不是 libstdc++。

于 2015-01-10T16:38:53.100 回答
0
std::ofstream strm = std::ofstream("test.txt");

ofstream没有复制构造函数。

于 2015-01-10T16:39:33.813 回答