Вставка значений в неупорядоченную карту, вызывающая ошибку «get()» [закрыто]C++

Программы на C++. Форум разработчиков
Anonymous
Вставка значений в неупорядоченную карту, вызывающая ошибку «get()» [закрыто]

Сообщение Anonymous »

Я хочу создать систему, которая получает определенный ключ (целое число), проверяет, находится ли ключ в unordered_map, и если да, запускает связанную функцию.
У меня есть класс Input с функцией init().
Эта функция инициализирует unordered_map, которую я хочу использовать для «проверки связи». >
Это функция init():
void Input::init(GLFWwindow* window) {
key_actions.insert(
{GLFW_KEY_ESCAPE, [window]() {
glfwSetWindowShouldClose(window, true);
}}
);
initialized = true;
}

Это объявление unordered_map:
std::unordered_map key_actions;

Надеюсь, эту ошибку можно воспроизвести, я добавлю функцию key_callback — функцию GLFW, которая возвращает нажатия клавиш.
void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) {
// this just works for the GLFW_PRESS option
if (action == GLFW_PRESS)
input->handle(key);
}

В файле, где реализована эта функция обратного вызова, находится объявление класса Input:
Input *input;

...

void Window::init_window() {
...
input = new Input(handle.get());
...
}

Я решил использовать здесь лямбда-функцию, потому что с обычными функциями возникали миллионы проблем :D. Через несколько часов мне не удалось получить никаких ошибок редактора, сейчас это мой случай.
Ошибка где-то в части вставки. Я постараюсь вставить наиболее важную информацию из полного журнала ошибок.
stl_pair.h:410:35: error: no matching function for call to 'get'
410 | return _S_convertiblehandle(key);
}

Window::Window(int width, int height, std::string _title) noexcept {
size.width = width;
size.height = height;
title = std::move(_title);
}

void Window::init_glfw() {
if (!glfwInit())
logger->throw_err("An error has occurred while initializing GLFW");
else
logger->println("GLFW initialized successfully");

glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 6);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

// resizable window
glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);

glfwSetKeyCallback(handle.get(), key_callback);
}

void Window::init_window() {
handle = GLFWwindowHandle(glfwCreateWindow((int) size.width, (int) size.height, title.c_str(), nullptr, nullptr));
input = new Input(handle.get());

if (handle == nullptr)
logger->throw_err("An error has occurred while creating GLFW window");
else
logger->println("GLFW window created successfully");

glfwMakeContextCurrent(handle.get());
}

void Window::init_glad() {
int version = gladLoadGL(glfwGetProcAddress);
if (!version)
logger->throw_err("An error has occurred while loading an OpenGL context");
else
logger->println("OpenGL context using GLAD created successfully");

std::cout

Подробнее здесь: https://stackoverflow.com/questions/786 ... -get-error

Вернуться в «C++»