存储到函数内的映射

时间:2012-04-21 13:18:18

标签: c++ function map

我正在尝试编写一个将信息从文本文件输入到地图中的函数。我的主要代码如下:

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


    //rest of code....
}

函数'fileinput'定义为:

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;
}

当我从测试文件运行这段代码时,如果我取消注释(*S1).printinfo();,它将读入数据并输出正确,并将正确计算已读入的学生数量。但是当我回到我的主要功能并输出现在存储在allstudents中的内容似乎什么都没有?

为什么会发生这种情况,是否有人知道解决这个问题的方法?我已经削减了很多代码,试图让它更容易阅读,但如果你需要看到其余的,我总是可以编辑它。

感谢。

2 个答案:

答案 0 :(得分:2)

这是因为您按价值传递map 。将函数的签名更改为

void fileinput(string datafile, record &map)

简短说明:当您通过值传递时,会生成参数(map)的副本。在函数内部,您对该副本执行修改,但是当函数返回并且副本超出范围时,这些修改将丢失。它们不会自动传播回“源”对象。

有关详细说明,请参阅Pass by Reference / Value in C++

答案 1 :(得分:2)

您正在按值传递地图,因此该函数会使其成为自己的副本,并且您的原始文件保持不变。尝试通过引用传递:

void fileinput(string datafile, record& map) { ... }
                                      ^ reference!