У меня есть std::map
, где я сохраняю указатель на класс. В конструкторе класса передаются несколько значений, поэтому переменные в классе имеют фактическое значение. Моя проблема заключается в том, что ключевое слово this
создает ошибку сегментации, когда я вызываю функцию этого класса, которая использует одну из ранее определенных переменных. Это выглядит, как это в деталях (короткая версия):«this» ключевое слово вызывает ошибку сегментации
Command::Command(const char *name, commandHandler h) // commandHandler is a function pointer
{
this->name = name;
this->handler = h;
}
Command::execute(int cn, std::vector<char *> args)
{
if (this->handler != NULL) // "this" is according to gdb a pointer to a class Command at 0x0
(handler)(cn, args);
}
Карта находится в статическом классе, то элементы карты вставляются в статической функции.
Edit: В связи с комментариями и ответами (спасибо ребята): добавить указатель класса в функции registerCommands(), который в основном создает указатели с помощью Command *command_xxx = new Command("xxx", &(handler_func));
и помещает его в карту в статическом классе. Вызов поступает из другого метода в том же классе, что и функция map и registerCommands(). Указатель класса получается с использованием commands.find("xxx")->second;
, который возвращает null -> null указатель.
показать код вызова – Kal
Исходя из контекста, точная проблема не может быть определена. На основе описания объект, по которому вы хотите вызвать функцию, теряется или вы вызываете забавный указатель (например, нулевой указатель) при вызове функции-члена. –