Я боролся с этим весь день, и я знаю, что моя ошибка проста, но я не могу ее преодолеть. Целью этого является последовательное считывание 10 различных файлов портативных грампластинок (pgm) в двумерный массив uchar images [img_size][imgNum]
. Первое измерение - это фактические данные изображения, массив 28x28, который я считываю линейно, а второе измерение - номер изображения из десяти. Переносимая серая карта представляет каждый пиксель с номером x таким, что 0
Хорошо, поэтому проблема, с которой я столкнулся, заключается именно в моей функции
for ( int i = 0; i < imgNum; i++){
instream.open(filename[i]); //this does not work when called in main
... и реализовано в main
int main(int argc, const char * argv[]) {
const char* filename[10] ={"digit_00.pgm","digit_01.pgm","digit_02.pgm","digit_03.pgm","digit_04.pgm","digit_05.pgm","digit_06.pgm","digit_07.pgm","digit_08.pgm","digit_09.pgm"};
uchar images[img_size][imgNum] ;
readPGMImages(images, img_size , filename , imgNum);
Кажется, я не могу, как мне кажется, заставить компилятор просмотреть filename[i]
, где i=1
как instream.open("digit_00.pgm")
Вот весь мой код. Мне нужно работать в рамках указанных параметров в readPGMImages. Значение использования чего-либо, кроме const char * filename
, не будет работать для меня.
#include <iostream>
#include <string>
#include <fstream>
#include <cstdlib>
typedef unsigned char uchar ;
typedef unsigned int uint ;
using namespace std;
const int img_size = 784;
const int imgNum = 10;
void readPGMImages( uchar images [img_size][imgNum], int img_size ,
const char * filename[imgNum], int imgNum )
{
uint holder[img_size][imgNum];
int header;
ifstream instream;
for ( int i = 0; i < imgNum; i++){
instream.open(filename[i]); //this does not work
if (instream.fail()){
cout << "failed to open" << endl;
exit(1);}
instream >> header >> header >> header >> header ;
for (int j = 0; j < img_size ; j++){
instream >> holder[j][i];
holder[j][i] = static_cast<uchar>(holder[j][i]);
images[j][i]=holder[j][i] ; //edited here
cout << images[j][i] << endl;
}
instream.close() ; //edited here
}
}
int main(int argc, const char * argv[]) {
const char* filename[10] ={"digit_00.pgm","digit_01.pgm","digit_02.pgm","digit_03.pgm","digit_04.pgm","digit_05.pgm","digit_06.pgm","digit_07.pgm","digit_08.pgm","digit_09.pgm"};
//I believe I have a mistake above but I'm unsure
uchar images[img_size][imgNum] ;
readPGMImages(images, img_size , filename , imgNum); //this is where I call the function
return 0;
}
Надеюсь, мой почтовый этикет в порядке.
Спасибо!