我无法弄清楚为什么我的pull_data函数在调用时崩溃我将其缩小到“myMap [word] ++”行。但是,如果我理解正确它应该工作。就像具有键“word”的元素不存在一样,将创建元素并初始化值。
我的第一个变体将拉出2个不同的文件并将数据保存到2个不同的地图中。
if (file.is_open()) {
while (file >> word) {
myMap[word]++;
}
file.close();
}
else {
cout << "Unable to open file.";
}
但是我没有从两个不同的文件中拉出来,而是试图让它读取一个包含我需要的所有数据的文件。表明我是从正面还是在外面阅读。
#include <iostream>
#include <fstream>
#include <map>
#include <string>
using namespace std;
void pull_data(map<string, float>& myMap1, map<string, float>& myMap2);
void push_data(map<string, float> myMap1, map<string, float> myMap2);
void sync_data(map<string, float>& myMap1, map<string, float>& myMap2);
int main()
{
map<string, float> offData;
map<string, float> onData;
pull_data(offData, onData);
sync_data(offData, onData);
push_data(offData, onData);
system ("PAUSE");
return 0;
}
void pull_data(map<string, float>& myMap1, map<string, float>& myMap2) {
string word;
bool onOff = false;
ifstream file("Data.txt");
if (file.is_open()) {
while (file >> word) {
if(word == "|" && onOff){
onOff = false;
}else if(word == "|"){
onOff = true;
}
if(onOff){
myMap2[word]++;
}else{
myMap1[word]++;
}
}
file.close();
}
else {
cout << "Unable to open file.";
}
}
void push_data(map<string, float> myMap1, map<string, float> myMap2){}
void sync_data(map<string, float>& myMap1, map<string, float>& myMap2){}
Data.txt示例
362 364 | 112 304 122 124 |
364 304 901 116 | 351 303 112 |
362 364 311 | 351 612 400 484 303 326 |
答案 0 :(得分:2)
这是因为您使用的映射数据类型不满足CopyConstructible和DefaultConstructible的要求,float
是原始数据类型。
这就是你有一个Zero引用的原因,当你使用运算符&#34; ++&#34;时它会崩溃。
检查: