0

ある関数でファイルを開き、そのポインタを他の関数で使用しようとしています。しかし、なぜ機能しないのかわかりません。以下はコードです。

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;

    }

};

そして、このコードを実行すると、次のような出力が出力されます。

前もって感謝します

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_ptrてみてくださいReadFile

于 2013-10-10T07:34:42.220 に答える
-1

file_ptr クラス メンバを作成し、ctor で同じものを初期化すると、メンバ関数のどこでも使用できます。

クラス外のファイル ポインタを取得するには、getter/setter 関数を使用します。

于 2013-10-10T07:31:13.920 に答える