У меня есть класс 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());
...
}
Я решил использовать здесь лямбда-функцию, потому что с обычными функциями возникали миллионы проблем
Ошибка где-то в части вставки. Я постараюсь вставить наиболее важную информацию из полного журнала ошибок.
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