C++ 函数未在作用域中声明(GLFW、OpenGL、Slackware)

C++ 函数未在作用域中声明(GLFW、OpenGL、Slackware),c++,C++,我正在尝试在Linux上使用g++编译我的第一个GL simple程序,使用: -lxcb-dri2-lxcb-lm-ldl-lXrender-ldrm-LXDemage-lX11 xcb-lxcb-glx-dri3-l-l/usr/local/lib-lrt-lXrandr-lXinerama-lXi-lXcursor-lGL-lm xcb-present-lglfw-lxcb sync-lxshmfence-lXxf86vm-LXFIXEXT-lX11-lpthread-lxcb-lXau-

我正在尝试在Linux上使用g++编译我的第一个GL simple程序,使用:

-lxcb-dri2-lxcb-lm-ldl-lXrender-ldrm-LXDemage-lX11 xcb-lxcb-glx-dri3-l-l/usr/local/lib-lrt-lXrandr-lXinerama-lXi-lXcursor-lGL-lm xcb-present-lglfw-lxcb sync-lxshmfence-lXxf86vm-LXFIXEXT-lX11-lpthread-lxcb-lXau-lXdmcp-lGLEW

我有一个错误:

graphics/window.cpp: In member function 'bool je::graphics::Window::init()':
graphics/window.cpp:55:32: error: 'key_callback' was not declared in this scope glfwSetKeyCallback(m_Window, key_callback);
我的代码在三个文件中

main.cpp:

#include "graphics/window.h"

int main()
{
    using namespace je;
    using namespace graphics;

    Window window("just engine", 800, 600);
    glClearColor(0.2f, 0.3f, 0.8f, 1.0f);

    GLuint vao;
    glGenVertexArrays(1, &vao);
    glBindVertexArray(vao);

    while (!window.closed())
    {
        window.clear();
        if (window.isKeyPressed(GLFW_KEY_A))
        {
            std::cout << "PRESSED!" << std::endl;
        }

        glDrawArrays(GL_ARRAY_BUFFER, 0, 6);
        window.update();
    }
    return 0;
}
#包括“graphics/window.h”
int main()
{
使用名称空间;
使用名称空间图形;
窗口(“仅发动机”,800600);
glClearColor(0.2f、0.3f、0.8f、1.0f);
GLuint-vao;
glGenVertexArrays(1和vao);
glBindVertexArray(vao);
而(!window.closed())
{
window.clear();
如果(按下窗口ISKEY(GLFW_键A))
{

STD::CUT> P>使用C++成员函数<代码> Voice KEYAL CALBACK()/CUT>,作为C实现的库函数的参数:代码> GFFWSEKEKECALD()/代码>,你应该声明它为“代码> static ,但首先在类声明之外。所以,试试你的<强>窗口。
class Window;
static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods);

class Window {
    private:
        // fields here

    public:
        // other member functions here

    private:
        friend void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods);
};
然后在窗口中.cpp

static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) {
    Window* win = (Window*) glfwGetWindowUserPointer(window);
    win->m_Keys[key] = action != GLFW_RELEASE;
}

我没有在这个glfw库中写作,因此我的答案可能不足以满足您的需要。请查看以下问题:,

您键入了回调(…)是成员函数,您不能将其用作参数。您应该创建包装器或将其定义为静态的,或仅在类外部定义。请一致地缩进代码。缩进时不要混合制表符和空格。放置2或3(保持一致)函数之间的空行可读性。看起来你是用C++编程而不是C语言。C语言没有类、构造函数或析构函数。我建议你调整标签。非常感谢!只编辑窗口。h为我工作。
class Window;
static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods);

class Window {
    private:
        // fields here

    public:
        // other member functions here

    private:
        friend void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods);
};
static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) {
    Window* win = (Window*) glfwGetWindowUserPointer(window);
    win->m_Keys[key] = action != GLFW_RELEASE;
}