2015-01-10 60 views
3

工作,我有一個簡單的測試代碼:ofstream的功能在Linux

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

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

如果我編譯在Windows操作系統上它完美的作品。然而,當我使用下列命令編譯它在Debian: 克++ - 4.7 -std =的C++ 0x -lpthread TestStream.cpp -ldl -o TestStream 比它給出了下面的輸出: enter image description here

我已經一派這個錯誤無濟於事。有人知道如何解決這個問題嗎?我在我的項目中使用了大量的流,並希望在Linux上進行編譯。

編輯:所以我現在編譯感謝WinterMute,但現在它打印空文件。我該如何解決?

編輯2:不知道爲什麼,但第二次編譯它的工作。謝謝!

+0

Re:編輯:你有寫權限的工作目錄/目標文件? – Wintermute

+2

你知道,沒有任何理由發佈圖片,而不是原始文本... – Deduplicator

+0

@Deduplicator有,如果文本不容易複製 – WillieWonka

回答

11

使用

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聲稱完全支持C++ 11版本4.8.1,這對編譯器是正確的,但對libstdC++不是。眼見爲實。

因此,值得一提的是libc++(一個與clang和llvm相關的C++標準庫實現)實現了可移動的流,並且clang 3.5和gcc 4.9(這些都是我在這裏試過的)編譯原始代碼如果使用它而不是libstdC++。

+0

爲什麼在Windows上這不是必需的? – WillieWonka

+5

因爲微軟希望你編寫只能在Windows上編譯和運行的代碼。 –

+0

好吧,現在它編譯,但它不打印任何文件。這是另一個Linux的問題? – WillieWonka

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

ofstream沒有複製構造函數。