【问题标题】:Can I have an array of ifstream in c++我可以在 C++ 中有一个 ifstream 数组吗
【发布时间】:2014-04-07 03:28:24
【问题描述】:

我需要同时打开一系列文件。使用 ifstream 对象数组处理文件会更容易。声明时出错

ifstream fin[file_count];

error: variable length array of non-POD element type 'ifstream'
      (aka 'basic_ifstream<char>')
  ifstream fin[fcount];

怎么了?我看到人们在How do I create an array of ifstream objects and how can I populate that array with numbered text files?

这样做

【问题讨论】:

    标签: c++ arrays ifstream


    【解决方案1】:

    您不能创建非固定长度的静态数组(file_count 如果不是常量,则在运行时获取它的值)。

    但是,您可以使用指向流的指针数组,这可能会减轻您的任务。将其视为一种选择:

    ifstream* fin = new ifstream[file_count];
    ...
    delete [] fin;
    

    【讨论】:

    • 这行不通。 C++ 流不可复制,vector 要求类型具有复制语义。
    • 谢谢@PaulMcKenzie,我不知道。已编辑。
    • 让它变得更好:vector&lt; unique_ptr&lt; ifstream &gt; &gt; 一个更灵活、惯用和安全的解决方案,如果 file_count 在编译时已知,array&lt; unique_ptr&lt; ifstream &gt;, file_count &gt;
    【解决方案2】:

    问题是您声明了一个可变大小的数组,这在 C++ 中是不允许的。

    在 C++ 中声明数组时:

    int i[size];
    

    变量大小必须是常量整数值

    为了创建一个可变大小的 C++ 数组,您需要使用动态分配的内存:

    int* i;
    i = new int[size];
    

    现在大小可以是一个变量。 问题当然是 i 不仅不是指针而且必须按原样使用,它还必须在以后释放,否则您将发生内存泄漏,即您的程序在技术上已保留但未用于任何东西的内存空间.

    更多关于动态内存here

    【讨论】:

    • 记得接受答案,这样问题就结束了
    猜你喜欢
    • 2016-10-21
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    • 2013-08-24
    • 1970-01-01
    • 1970-01-01
    • 2015-01-11
    • 1970-01-01
    相关资源
    最近更新 更多