Я открываю файл в 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 !!"
заранее спасибо
fstream file_ptr(file_path.c_str(), std::ios_base::in);
Это новая переменная fstream, локальная для вашего конструктора. Вы, вероятно, хотели использовать закрытую переменную с тем же именем.
Вероятно, для того, чтобы компилировать код, вы поместили fstream file_ptr
где-нибудь, где вы могли видеть его из ReadFile
но вы забыли удалить локальную копию в DtFileReaderEuc
. В этом случае вы используете локальную версию в DtFileReaderEuc
и "глобальную" в ReadFile
которая не открывается. Как вам уже предложили, попробуйте передать file_ptr
в ReadFile
Область file_ptr
не ясна. Вы объявили и определили file_ptr
в DtFileReaderEuc
поэтому вам нужно передать его указатель на внутреннюю функцию ReadFile
, в противном случае объявление file_ptr
должно быть во внешней области и поместить определение в DtFileReaderEuc
.
create file_ptr член класса и инициализировать его в ctor, тогда его можно использовать в любом месте в функциях-членах.
Чтобы получить указатель на внешний класс, используйте функции getter/setter.