Столкнулся с такой проблемой, мне необходимо записать абстрактный класс в unordered_map для дальнейшего использования. Однако, при попытке это сделать постоянно получаю segmentation fault.
class Form {
protected:
const char *title;
public:
explicit Form(const char *title) {
this->title = title;
}
virtual const char *getType() const = 0;
const char *getTitle() const {
return title;
}
string jsonSerialize();
virtual void serializeFormData(JsonWriter &writer) {}
};
class MenuForm : public Form {
protected:
const char *text;
const vector<Button *> buttons;
public:
explicit MenuForm(const char *title, const char *text, vector<Button *> buttons) : Form(title), text(text), buttons(std::move(buttons)) {}
const char *getType() const override {
return "form";
}
void serializeFormData(JsonWriter &writer) override;
};
struct ServerPlayer : Player {
int formIdCounter = 0;
std::unordered_map<int, std::shared_ptr<Form>> forms;
void sendNetworkPacket(Packet &packet) const;
void sendForm(Form *form) {
int id = formIdCounter++;
ModalFormRequestPacket pk{this->getClientSubId()};
pk.formId = id;
pk.formData = form->jsonSerialize();
forms.insert(std::make_pair(id, std::shared_ptr<Form>(form))); //вызывает краш
sendNetworkPacket(pk);
}
}
Вызывается вот так:
auto menu = new MenuForm("test", "text", vector<Button *>{
new Button("button #1"),
new Button("button #2")
});
player.sendForm(menu);
Решил проблему банальным переносом std::unordered_map
в другой класс.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть два файла Не считая хэйдера arrayh , в ней только одна строчка: