Проблемы с управлением памятью в файле

0

Я открываю файл в 1 функции и пытаюсь использовать указатель этого в другой функции. Но я не знаю, почему он не работает. Ниже приведен код.

void ReadFile()
    {
        float data;
        int total_rows, pairs;
        double longitude, latitude;

        {
            GsmFingreprintEuc *g;
            ll.push_front(new GsmFingreprintEuc);

            if(file_ptr.is_open())
                cout<<"Yes!!"<<endl;
            else
                cout<<"NO!!"<<endl;
            file_ptr >> data;
            total_rows = data;
            cout<<"Total Rows:"<<total_rows<<endl;

            for (int i = 0; i < total_rows; i++)
            {
                g = ll.front();
                file_ptr >> data;
                pairs = data;
                for (int j = 0; j < pairs; j++)
                {
                    int id;
                    double value;
                    file_ptr >> data;
                    id = data;
                    file_ptr >> data;
                    value = data;
                    g->add_map(id, value);

                }
                file_ptr >> data;
                latitude = data;
                g->set_latitude(latitude);
                file_ptr >> data;
                longitude = data;
                g->set_longitude(longitude);

            }

        }

        cout<<"Size: "<<ll.size()<<endl;

    }

    DtFileReaderEuc(string file_path)
    {
        cout << "I am in Constructor" << endl;
        cout << file_path << endl;
        fstream file_ptr(file_path.c_str(), std::ios_base::in);
        if (file_ptr.is_open()) {
            cout << "Yahhy!! file Opend successfully" << endl;

            float data;
            file_ptr >> data;
            double total_rows = data;
            cout<<"Total Rows:"<<total_rows<<endl;


            //file_ptr = myfile;
            ReadFile();
            //myfile.close();

        } else
            cout << "Wohoo!! Wrong path" << endl;

        cout << "Done!!" << endl;

    }

};

и когда я верю этот вывод кода: "Я нахожусь в Constructor/home/umar/Desktop/DataFile/dha_dataset.gfp Yahhy !! file Opend успешно Всего строк: 7257 NO !! Всего строк: 0 Размер: 1 Done !!"

заранее спасибо

Теги:
memory-management
file-handling

4 ответа

1
Лучший ответ
fstream file_ptr(file_path.c_str(), std::ios_base::in);

Это новая переменная fstream, локальная для вашего конструктора. Вы, вероятно, хотели использовать закрытую переменную с тем же именем.

  • 0
    мм ты прав.
  • 0
    Я хочу открыть файл в конструкторе и использовать этот file_ptr в функции ReadFile (). Можете ли вы помочь мне с этим, как это сделать? Благодарю вас.
Показать ещё 1 комментарий
0

Вероятно, для того, чтобы компилировать код, вы поместили fstream file_ptr где-нибудь, где вы могли видеть его из ReadFile но вы забыли удалить локальную копию в DtFileReaderEuc. В этом случае вы используете локальную версию в DtFileReaderEuc и "глобальную" в ReadFile которая не открывается. Как вам уже предложили, попробуйте передать file_ptr в ReadFile

  • 0
    хорошо я открываю файл в конструкторе, поэтому не могу вернуться. есть еще что-нибудь?
0

Область file_ptr не ясна. Вы объявили и определили file_ptr в DtFileReaderEuc поэтому вам нужно передать его указатель на внутреннюю функцию ReadFile, в противном случае объявление file_ptr должно быть во внешней области и поместить определение в DtFileReaderEuc.

-1

create file_ptr член класса и инициализировать его в ctor, тогда его можно использовать в любом месте в функциях-членах.

Чтобы получить указатель на внешний класс, используйте функции getter/setter.

  • 0
    Это не ответ. Это должен быть комментарий. (И на самом деле, я уже сделал тот же комментарий, поэтому, пожалуйста, не добавляйте шума).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню