2012-04-21 9 views
0

テキストファイルからマップに情報を入力する関数を記述しようとしています。次のように私の主なコードが行く:私はテストファイルからのコードのこの部分を実行すると関数内のマップに格納する

void fileinput(string datafile, record map){ 
    fstream file1(datafile); 
    if(!file1.good()){ 
    //error code 
    } 
    //Pulls information from file 
    student* S1= new physics(name,ID); //creates a new pointer 
    //(*S1).printinfo(); //Can print info if required for de-bug 
    map[ID]=S1; //store to map 
    entries++; //counts entries read in    
    } 
    cout<<"Import complete. "<<entries<<" new students entered."<<endl; 
} 

、それはデータを読み込むとします:関数「FileInputクラスは」と定義されて

int main(){ 
    typedef map<int,student*> record; 
    record allstudents; 
    fileinput("inputtest.txt",allstudents); 


    //rest of code.... 
} 

(*S1).printinfo();のコメントを外して読み込んだ生徒の数を正しく数えればいいと思います。しかし、私の主な機能に戻って今何が保存されているのですか?allstudentsそこには何も表示されません。

なぜこの問題が発生していますか?誰もこの問題を回避する方法を知っていますか?試して読みやすくするために多くのコードを削除しましたが、残りの部分を見る必要がある場合はいつでもこれを編集できます。

ありがとうございました。

答えて

2

これは、値でmapを渡すためです。

void fileinput(string datafile, record &map) 

短い説明に関数のシグネチャを変更する:あなたは値によって渡す場合、引数(map)のコピーが作成されます。関数内では、そのコピーに対する変更を実行しますが、関数が戻り、コピーが有効範囲外になると、これらの変更は失われます。それらは自動的に「ソース」オブジェクトに戻されません。

詳細な説明については、Pass by Reference/Value in C++を参照してください。

+0

私はそれが何か明らかになると思った!ありがとう – QuantumO

2

マップを値渡ししているので、関数は独自のコピーを作成し、オリジナルは変更されません。参考にしてみてください:

void fileinput(string datafile, record& map) { ... } 
            ^reference! 
関連する問題