【发布时间】: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];
这样做
【问题讨论】:
我需要同时打开一系列文件。使用 ifstream 对象数组处理文件会更容易。声明时出错
ifstream fin[file_count];
error: variable length array of non-POD element type 'ifstream'
(aka 'basic_ifstream<char>')
ifstream fin[fcount];
这样做
【问题讨论】:
您不能创建非固定长度的静态数组(file_count 如果不是常量,则在运行时获取它的值)。
但是,您可以使用指向流的指针数组,这可能会减轻您的任务。将其视为一种选择:
ifstream* fin = new ifstream[file_count];
...
delete [] fin;
【讨论】:
vector< unique_ptr< ifstream > > 一个更灵活、惯用和安全的解决方案,如果 file_count 在编译时已知,array< unique_ptr< ifstream >, file_count >
问题是您声明了一个可变大小的数组,这在 C++ 中是不允许的。
在 C++ 中声明数组时:
int i[size];
变量大小必须是常量整数值
为了创建一个可变大小的 C++ 数组,您需要使用动态分配的内存:
int* i;
i = new int[size];
现在大小可以是一个变量。 问题当然是 i 不仅不是指针而且必须按原样使用,它还必须在以后释放,否则您将发生内存泄漏,即您的程序在技术上已保留但未用于任何东西的内存空间.
更多关于动态内存here。
【讨论】: