Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C+中的ifstream对象数组+;_C++_Arrays_Iostream_Ifstream_Ofstream - Fatal编程技术网

C++ C+中的ifstream对象数组+;

C++ C+中的ifstream对象数组+;,c++,arrays,iostream,ifstream,ofstream,C++,Arrays,Iostream,Ifstream,Ofstream,我试图创建一个ifstream对象数组,代码进行编译,我能够创建ifstream大小sizeargs-1的对象数组,但是一旦我试图在其中一个ifstream对象中打开文件,程序就会崩溃,这非常令人沮丧 我尝试这样做的原因是,我必须根据内存中.ppm文件的数量动态创建ifstream对象,这似乎是一个完美的解决方案,只要能够ifstream\u数组[1]。打开(args[0])因为我需要同时从多个.ppm文件中读取文本 如果这样做是不可能的;有没有别的办法 int main(int argc, c

我试图创建一个
ifstream
对象数组,代码进行编译,我能够创建
ifstream
大小
sizeargs-1
的对象数组,但是一旦我试图在其中一个
ifstream
对象中打开文件,程序就会崩溃,这非常令人沮丧

我尝试这样做的原因是,我必须根据内存中
.ppm
文件的数量动态创建
ifstream
对象,这似乎是一个完美的解决方案,只要能够
ifstream\u数组[1]。打开(args[0])
因为我需要同时从多个
.ppm
文件中读取文本

如果这样做是不可能的;有没有别的办法

int main(int argc, char ** args)
{
        //counts number of .ppm files in array       
        int sizeargs = (sizeof(args)/sizeof(*args)); 

        ifstream inputfiles[sizeargs-1];

        int incounter = 0;

        //this is where the program crashes
        inputfiles[incounter].open(args[0]); 
}
不,没有。计算结果为
sizeof(char**)/sizeof(char*)
,它始终为1<因此,code>sizeargs-1为
0
,您的数组中没有项目。通过指向数组的指针无法找到数组的大小。您需要使用
argc
,它是
args
中的元素数


基于注释,还应该避免可变长度数组,因为它们只适用于编译器扩展,而不是C++标准的一部分。我建议改为使用向量:

    std::vector<std::ifstream> inputfiles(sizeargs-1);
std::矢量输入文件(sizeargs-1);
不,没有。计算结果为
sizeof(char**)/sizeof(char*)
,它始终为1<因此,code>sizeargs-1为
0
,您的数组中没有项目。通过指向数组的指针无法找到数组的大小。您需要使用
argc
,它是
args
中的元素数


基于注释,还应该避免可变长度数组,因为它们只适用于编译器扩展,而不是C++标准的一部分。我建议改为使用向量:

    std::vector<std::ifstream> inputfiles(sizeargs-1);
std::矢量输入文件(sizeargs-1);
此声明:

    int sizeargs = (sizeof(args)/sizeof(*args)); //counts number of .ppm files in array
    ifstream inputfiles[sizeargs-1];
在*现代编译器上总是会产生
sizeargs
=1,因为基本数据指针的大小除以基本数据指针的大小,等于1


在C++11及更早版本中,此语句:

    int sizeargs = (sizeof(args)/sizeof(*args)); //counts number of .ppm files in array
    ifstream inputfiles[sizeargs-1];
无效,因为(未动态分配)原始数组的大小必须是编译时常量

然而,g++提供了C99可变长度数组(VLA)作为语言扩展


相反,请使用
std::vector

*James Kanze在对另一个答案的评论中指出,有些机器的
sizeof(char*)
大于
sizeof(char**)
。由于
char
是基本的可寻址单元,因此
char*
指针是最大的普通指针。我认为这种区别在这里并不重要,但读了詹姆斯的评论(我们在过去讨论过这一点),我意识到我对SO答案“价值”的态度是错误的,并相应地进行了调整。

这句话:

    int sizeargs = (sizeof(args)/sizeof(*args)); //counts number of .ppm files in array
    ifstream inputfiles[sizeargs-1];
在*现代编译器上总是会产生
sizeargs
=1,因为基本数据指针的大小除以基本数据指针的大小,等于1


在C++11及更早版本中,此语句:

    int sizeargs = (sizeof(args)/sizeof(*args)); //counts number of .ppm files in array
    ifstream inputfiles[sizeargs-1];
无效,因为(未动态分配)原始数组的大小必须是编译时常量

然而,g++提供了C99可变长度数组(VLA)作为语言扩展


相反,请使用
std::vector


*James Kanze在对另一个答案的评论中指出,有些机器的
sizeof(char*)
大于
sizeof(char**)
。由于
char
是基本的可寻址单元,因此
char*
指针是最大的普通指针。我认为这种区别在这里并不重要,但读了James的评论(我们在过去讨论过这一点),我意识到我对SO答案“价值”的态度是错误的,并相应地进行了调整。

此外,ifstream inputfiles[sizeargs-1];这是无效的。数组的大小必须是常量。这不是标准的C++,只有编译器允许扩展时才会工作。C++是C++的。为什么不使用
std::vector
,这样分配和调整大小就更容易了?它实际上不是一个数组,而是指向指针数组的指针。通常是1,但并不总是1。有(或曾经有)台机器上的
char*
大于
char**
(在这种情况下,它将是0)。谢谢,一位同学给了我那个代码(sizeof(args)/sizeof(*args));,我认为这是正确的,除了ifstream inputfiles[sizeargs-1]之外,我知道还有一个问题需要解决;这是无效的。数组的大小必须是常量。这不是标准的C++,只有编译器允许扩展时才会工作。C++是C++的。为什么不使用
std::vector
,这样分配和调整大小就更容易了?它实际上不是一个数组,而是指向指针数组的指针。通常是1,但并不总是1。有(或曾经有)台机器上的
char*
大于
char**
(在这种情况下,它将是0)。谢谢,一位同学给了我那个代码(sizeof(args)/sizeof(*args));,我认为这是正确的,我知道有一个问题需要解决