我想創建存儲的情況下,在地圖像這樣一類:C++地圖拋出向量下標越界
class Apple {
public:
static Apple* getApple(const std::string &name) {
auto it = allApples.find(name);
if (it == allApples.end()) // if this apple doesnt exist, make a new one
return new Apple(name);
else // if the apple exists, return its pointer
return it->second;
}
private:
static std::unordered_map<std::string, Apple*> allApples =
std::unordered_map<std::string, Apple*>();
Apple(const std::string &name) {
// create an apple
allApples.insert({ name, this });
}
}
現在,我做了哪些存儲靜態蘋果像這樣的類:
class Orange {
static Apple *myOrangeApple;
}
myOrangeApple = Apple::getApple("orange");
當我運行程序時,它在getApple()方法的第一行崩潰,矢量下標超出範圍錯誤。我試圖四處尋找,但我無法找到任何解決地圖和超出範圍錯誤的解決方案。我從我做的一些研究中得出的最好的猜測是,它是關於靜態順序初始化的東西,但我確實不太確定。
第一行你的意思是'auto it = allApples.find(name);'?我沒有看到任何與'std :: vector'或下標操作符相關的東西。 – songyuanyao
@songyuanyao,是的那一行是拋出調試斷言/異常(在發佈版本中)。我沒有看到任何與矢量相關的東西,這就是爲什麼我很困惑。 –
你能給我們足夠的代碼,以便我們可以編譯它並複製問題嗎? –