我有一个简单的testing代码:
#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比它给出了以下输出:
我GOOGLE了这个错误无济于事。 有谁知道如何解决这个问题? 我在我的项目中使用了大量的stream,并希望在Linux上进行编译。
编辑:所以我现在编译感谢WinterMute,但现在它打印空文件。 我该如何解决?
编辑2:不知道为什么,但第二次编译它的工作。 谢谢!
使用
std::ofstream strm("test.txt");
这个:
std::ofstream strm = std::ofstream("test.txt");
需要一个std::ofstream
没有的拷贝构造函数或只有自C ++ 11以来才有的移动构造函数。 GCC 4.7还没有完全支持C ++ 11,显然这是缺少的功能之一。
在评论中,技术委员会提到,可移动的流将不会到海湾合作委员会,直到计划于今年发布的第5版。 这让我感到惊讶,因为gcc声称完全支持C ++ 11版本4.8.1,这对于编译器是正确的,但对于libstdc ++却是如此。 眼见为实。
所以也许值得一提的是, libc ++ (clang和llvm附属的一个c ++标准库实现)实现了可移动的流,并且clang 3.5和gcc 4.9(这里是我在这里试过的那些)编译原始代码而不是libstdc ++。
std::ofstream strm = std::ofstream("test.txt");
ofstream
没有复制构造函数。