const char * в строку имен файлов для чтения в 10 различных файлах .pgm в двумерный массив - PullRequest
0 голосов
/ 21 октября 2019

Я боролся с этим весь день, и я знаю, что моя ошибка проста, но я не могу ее преодолеть. Целью этого является последовательное считывание 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;
}

Надеюсь, мой почтовый этикет в порядке.

Спасибо!

...