Я пытаюсь создать класс, который хранит свои экземпляры в карте, как так: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() с ошибкой векторного индекса вне диапазона. Я пробовал оглядываться, но я не могу найти какое-либо решение, касающееся карт и ошибки вне диапазона. Мое лучшее предположение из некоторых исследований, которые я сделал, это то, что это что-то о инициализации статического порядка, но я действительно не слишком уверен.
1-я строка, которую вы имели в виду 'auto it = allApples.find (name);'? Я не вижу ничего подходящего для оператора std :: vector или index. – songyuanyao
@songyuanyao, Да, эта строка является тем, что выбрасывает утверждение/исключение отладки (в сборке выпуска). Я не вижу ничего связанного с вектором, поэтому я так смущен. –
Можете ли вы дать нам достаточно кода, чтобы мы могли скомпилировать его и воспроизвести проблему? –