Я пытаюсь использовать map
с ключом string
, но он не работает, и я не мог понять, почему. Я хотел бы получить некоторую помощь в понимании основ C ++ относительно использования этой столь важной структуры.
model.hpp
#pragma once
#include <map>
#include <utility>
#include <string>
#include <iostream>
#include "../prs/ast.h"
using namespace std;
using namespace ast;
typedef map<string, Variable> Map;
typedef pair<string, Variable> Element;
namespace model{
class Warehouse {
public:
Map stock;
Warehouse(){
Map* _stock = new Map();
stock = *_stock;
}
Variable* get(string id){
Map::iterator it = stock.find(id);
if (it != stock.end()){
return &(*it).second;
}
else {
return __define__(id);
}
}
Variable* __define__(string id){
Variable* defined = new Variable(id);
stock.insert(Element(id, *defined));
return defined;
}
};
static Warehouse* WAREHOUSE;
};
модель. cpp
#pragma once
#include "model.hpp"
using namespace std;
namespace model {
Warehouse* WAREHOUSE = new Warehouse();
}
В этом контексте Variable
- это объект проекта, определенный в ast
пространстве имен, уже протестированном, а также указатель WAREHOUSE
работает соответствующим образом с инициализированным классом
Инструкция stock.find(id)
выдает упомянутое сообщение об ошибке: Segmentation fault (core dumped)
, что, как я полагаю, означает stock
, неправильно инициализировано.
Что именно происходит с инициализацией stock
, выполняемой в конструкторе Warehouse
? Я понимаю, что new
ключевое слово alloc
s map
и разыменование его возвращаемой точки будет хранить структуру в атрибуте stock
Warehouse
member.
Я неправильно понял?