「的錯誤的只讀位置分配」我有int
鍵和vector< vector<int>>
數據尷尬的哈希表(具體地,unordered_map)。我需要定期更新這個二維向量中的元素。沒有內在原因,我不應該這樣做,對吧?我已經轉向更新的g ++編譯器,抱怨在下面指定的行上分配了只讀位置。:在unordered_map(C++)
typedef std::tr1::unordered_map< int, vector< vector<int> > > pimap;
vector< Strain * > liveStrains;
pimap phenotypeIs;
int NUM_DEMES = 3;
...
vector< Strain * >::const_iterator lsItr;
for (lsItr = liveStrains.begin(); lsItr != liveStrains.end(); ++lsItr) {
int thisP = (*lsItr)->getPhenotype();
pimap::iterator piItr = phenotypeIs.begin();
piItr = phenotypeIs.find(thisP);
if (piItr != phenotypeIs.end()) {
for (int d = 0; d < NUM_DEMES; d++) {
(piItr -> second)[ thisStep ].at(d) = (*lsItr)->getI(d); // error here
}
}
}
我是C++新手,所以沒什麼太明顯的。感謝您的任何幫助。
繼蒂姆的建議
我已經更換了的代碼的相關部分上面下面:
pimap::iterator piItr = phenotypeIs.find(thisP);
if (piItr != phenotypeIs.end()) {
for (int d = 0; d < NUM_DEMES; d++) {
vector< vector<int> > & thisVec2 = piItr->second;
vector<int> & thisVec = thisVec2.at(thisStep);
int & ii = thisVec.at(d);
ii = (*lsItr)->getI(d);
// (piItr -> second)[ thisStep ].at(d) = (*lsItr)->getI(d); // error was here
}
此代碼編譯沒有錯誤,似乎運行正常。像Tim一樣,我仍然不太明白爲什麼修復工作。該錯誤先前出現在gcc版本4.1.2 20080704(Red Hat 4.1.2-44)中,但與gcc版本4.0.1(Apple Inc. build 5465)不兼容。當我不在嚴格的期限內時,我會盡量仔細地分析錯誤!
什麼'(* lsItr) - > getI(d)'返回? – AraK 2009-11-19 00:26:39
(* lsItr) - > getI(d)返回一個int。 (真的。) – Sarah 2009-11-19 00:59:51
@Tim謝謝我誤會了:) – AraK 2009-11-19 01:18:10