我有一個2D地圖聲明動態分配到一個二維的std :: unordered_map
unordered_map< string, unordered_map<string, Road*>* > matrix;
這需要的
class Road {
public:
Road() : connected(0), weight(0) {}
bool connected;
int weight;
};
路的實例,我分配如下
void addPlace(string place) {
// error checking
if (placeExists(place)) {
cout << "Place already exists" << endl;
return;
}
Road *road = new Road();
unordered_map<string, Road*> *newRelationship = new unordered_map<string, Road*>;
newRelationship->insert({ {place},{road} });
// add to network
matrix.insert({ { place },{ newRelationship } });
++n_verticies;
}
但是,當我撥打
void connectPlace(string source, string dest, int w)
if (!placeExists(dest) || !placeExists(source)) {
cout << "Place(s) does not exists" << endl;
return;
}
...
if (matrix.find(source)->second->find(dest)->second->connected)
我收到一個錯誤:「列表迭代器不可解引用」,這表明我已經在我的分配出錯了地方?先謝謝你。
這是我的呼籲placeExists,從connectPlace返回true兩個電話:
bool placeExists(string place) {
if (matrix.find(place) == matrix.end()) {
return false;
}
return true;
}
我已經打破下來到
auto a = matrix.find(source);
auto b = matrix.find(source)->second;
auto c = matrix.find(source)->second->find(dest); // (<Error reading characters of string.>, {connected=??? weight=??? })
auto d = matrix.find(source)->second->find(dest)->second; // stops here
auto e = matrix.find(source)->second->find(dest)->second->connected;
我的函數調用如下
Graph *road_network = new Graph(false);
road_network->addPlace("Sacremento");
road_network->addPlace("Antelope");
road_network->addPlace("Roseville");
road_network->addPlace("San Francisco");
road_network->addPlace("San Jose");
road_network->addPlace("Davis");
road_network->addPlace("Los Angelous");
road_network->connectPlace("Sacremento", "Antelope", 5); //<-- break
road_network->connectPlace("San Francisco", "San Jose", 2);
road_network->connectPlace("Los Angelous", "Davis", 10);
road_network->connectPlace("Davis", "Antelope", 4);
road_network->connectPlace("Roseville", "Davis", 5);
road_network->connectPlace("San Jose", "Antelope", 6);
road_network->connectPlace("Davis", "Los Angelous", 5);
'matrix.find(source) - > second-> find(dest) - > second-> connected'這在一行中做了太多事情。我建議把它分成多行來幫助追蹤錯誤的位置。 –
這是一個編譯器錯誤,對嗎?如果你甚至不能編譯程序,那麼問題出在語法上,而不是內存分配上。 –
你沒有顯示'placeExists'的作用,但是在它的表面上,你沒有檢查到'matrix.find(source) - > second-> find(dest)'成功嘗試解引用它。 –