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 !! 文件已成功打开 Total Rows:7257 NO!! Total Rows:0 Size: 1 Done!!”

提前致谢

4

4 回答 4

1
fstream file_ptr(file_path.c_str(), std::ios_base::in);

这是构造函数本地的新 fstream 变量。您可能打算使用同名的私有变量。

于 2013-10-10T07:27:26.520 回答
0

可能,为了使代码编译,您放置了一个fstream file_ptr可以看到它的地方,ReadFile但您忘记删除DtFileReaderEuc. 在这种情况下,您使用本地版本和未打开DtFileReaderEuc的“全局”版本。ReadFile正如有人已经向您建议的那样,请尝试传递file_ptrReadFile

于 2013-10-10T07:34:42.220 回答
0

file_ptr范围不明确。您已经声明并定义了file_ptrin ,DtFileReaderEuc因此您必须将其指针传递给内部函数ReadFile,否则,声明file_ptr应该在外部范围内并将定义放入DtFileReaderEuc.

于 2013-10-10T07:40:27.867 回答
-1

创建 file_ptr 一个类成员并在 ctor 中初始化它,然后它可以在成员函数的任何地方使用。

要在类之外获取文件指针,请使用 getter/setter 函数。

于 2013-10-10T07:31:13.920 回答