2017-08-04 29 views
-2

,它說的std :: fstream的,但是編譯器會引發我用</p> <pre><code>using std::fstream; </code></pre> <p>,並試圖創建類<strong>ofstream的</strong>的對象錯誤

error: ‘ofstream’ was not declared in this scope

但是當具體使用std: :使用流它工作正常。我的問題是爲什麼使用std :: fstream是不夠的,因爲ofstream/ifstream是這個庫的類嗎?

尊敬的敬業的downvoters,請在downvoting之前提供一個理由,以便我可以改進。謝謝!

+7

'fstream'和'ofstream'不是一回事。 – user975989

+0

@ user975989你能否詳細說明一下。 – Gaurav

+0

當你使用'using'指令時,你需要精確地命名一個類型。這兩種類型不是一樣的。 – user975989

回答

3

您在混合使用#includeusing#include包括(令人驚訝的是不是嗎?)源文件中的聲明使它們可用。 #include <fstream>實際上聲明瞭std::fstreamstd::ofstream

using另一方面從當前名稱空間中的其他名稱空間導入聲明,以允許使用不合格的名稱。這裏std::ofstream是限定名(包括命名空間)和不合格之一是... ofstream

所以,如果你想使用不合格的名稱ofstream,加using std::ofstream;到您的代碼。

但請注意,命名空間已添加到C++中,以允許正確分隔聲明並避免名稱衝突。特別是在主命名空間(該不贊成using namespace std;using指令的過度使用導致命名空間污染,並會導致在瞬間發生衝突......

或者,你可以省略using指令,並堅持使用std::ofstream整個代碼。

+0

我在想什麼時,我'使用'使用fstream,我認爲所需的forstream所需的材料也被導入,因爲所有都來自fstream標題下,並且使用fstream必須將ofstream作爲子集。這是錯的嗎? – Gaurav

相關問題