C++ 函数未在作用域中声明(GLFW、OpenGL、Slackware)
我正在尝试在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 我有一个错误: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-
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;
}