存储到函数内的映射
storing to a map inside a function
我正在尝试编写一个函数,该函数将从文本文件将信息输入到地图中。我的主要代码如下:
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
中的内容时,那里似乎什么都没有?
为什么会发生这种情况,有人知道解决这个问题的方法吗?我已经删减了很多代码,试图让它更易于阅读,但如果您需要查看其余部分,我可以随时对其进行编辑。
谢谢。
这是因为您按值传入map
。将函数的签名更改为
void fileinput(string datafile, record &map)
简短解释:当您按值传递时,会创建参数(map
)的副本。在函数内部,您可以对该副本执行修改,但当函数返回并且副本超出范围时,这些修改将丢失。它们不会自动传播回"源"对象。
有关详细说明,请参阅按引用/值传递C++。
您是按值传递映射的,因此该函数会制作自己的副本,并且您的原始副本保持不变。尝试通过引用传递:
void fileinput(string datafile, record& map) { ... }
^ reference!
相关文章:
- 将函数类成员映射到类本身内部
- 使用std::函数映射对象方法
- 内联映射初始化的动态atexit析构函数崩溃
- 从函数角度看ID到文件路径的内部与外部映射
- C++ 已停止工作静态映射函数
- C++中的映射函数
- 从 lambda 内部返回 C++11 中的 lambda 类型(平面映射函数)
- 如何将值传递给MFC消息映射函数on_command
- 创建高阶映射函数时,应该使用指针、引用或值
- 什么是 C++ 中的映射函数
- 使用变量参数映射函数并通过字符串 c++ 调用
- OpenCV 3.1 重映射函数类型值错误
- std::映射函数指针
- 在一个简单的映射函数中避免IF
- 相当于使用lambda的python映射函数
- 更好的数据结构映射函数与多个参数(键)
- 使用 c++11 构造映射函数
- 反向映射函数关系(c++)
- 类C++中的映射函数
- c++映射函数中的向量相等