【问题标题】:Why include both <iostream> and <fstream> [duplicate]为什么同时包含 <iostream> 和 <fstream> [重复]
【发布时间】:2012-08-20 12:28:56
【问题描述】:

可能重复:
Why do I need to include both the iostream and fstream headers to open a file

我写了这段代码:

#include <iostream>
int main()
{
   std::ofstream file_out("file.txt");
   file_out.close();

   return 0;
}

std::ofstream 是在&lt;iostream&gt; 中定义的,但是编译这段代码我得到以下错误:

error: variable 'std::ofstream file_out' has initializer but incomplete type

我发现如果我还包含&lt;fstream&gt;,错误就会消失并且代码可以编译。如果std::ofstream 包含在&lt;iostream&gt; 中,为什么还要包含&lt;fstream&gt;

【问题讨论】:

    标签: c++ stream iostream fstream


    【解决方案1】:

    你打错了:你的意思是ofstream,但你的代码是ostream。后者只是一个基类,不能直接实例化。 (而且您需要 &lt;fstream&gt; 标头,而不是 &lt;iostream&gt;。)

    【讨论】:

    • 是的,我编辑了代码。谢谢。
    • @R.M.:但现在你声称ofstreamiostream 中定义的说法完全是可疑的,不是吗? (事实上​​它显然不是。)
    • 非。我的问题来自于我得到的错误不是undefined symbol或类似的东西
    • @R.M.:“未定义符号”是链接器错误,而不是编译器错误。你确定你没有混淆声明和定义吗?
    【解决方案2】:

    std::ofstream 定义在&lt;iostream&gt;

    不。它可以在那里声明,但它是在fstream 中定义的。

    【讨论】:

      【解决方案3】:

      因为定义在 #include &lt;fstream&gt; 中。你还应该看看:

      Why do I need to include both the iostream and fstream headers to open a file了解更多详情。

      【讨论】:

        【解决方案4】:

        因此,C++ 标准没有提及在其他头文件中包含头文件。对于构造和使用std::ofstream - 您应该包含fstream 标头。

        【讨论】:

          猜你喜欢
          • 2011-01-27
          • 1970-01-01
          • 2011-12-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多