C++ glfw非标准语法;使用'&';创建指向成员的指针的步骤

C++ glfw非标准语法;使用'&';创建指向成员的指针的步骤,c++,glfw,C++,Glfw,我不断得到非标准语法;使用“&”创建指向成员的指针 我不知道为什么它不起作用 如果Resize函数是全局的,它就可以工作 最简单的例子: #include <GLFW/glfw3.h> class test { public: test(){} ~test(){} void resize(GLFWwindow* window, int new_width, int new_height) {} }resizer; int main(){ auto

我不断得到
非标准语法;使用“&”创建指向成员的指针

我不知道为什么它不起作用

如果Resize函数是全局的,它就可以工作

最简单的例子:

#include <GLFW/glfw3.h>
class test {
public:
    test(){}
    ~test(){}
    void resize(GLFWwindow* window, int new_width, int new_height) {}
}resizer;

int main(){
    auto newwindow = glfwCreateWindow(1, 1, "test", NULL, NULL);
    glfwSetWindowSizeCallback(newwindow, resizer.resize);

   return 0;
}

函数指针与传递到
glfwSetWindowSizeCallback()
中所需的声明不匹配

它必须是一个
静态
函数,并且需要正确应用范围运算符

#include <GLFW/glfw3.h>
class test {
public:
    test(){}
    ~test(){}
    static void resize(GLFWwindow* window, int new_width, int new_height) {}
 // ^^^^^^
}  /*resizer*/;
// ^^^^^^^^^^^ No need for this.

int main(){
    auto newwindow = glfwCreateWindow(1, 1, "test", NULL, NULL);
    glfwSetWindowSizeCallback(newwindow, test::resize);

   return 0;
}
#包括
课堂测试{
公众:
test(){}
~test(){}
静态空白调整大小(GLFWwindow*窗口,int new_width,int new_height){}
// ^^^^^^
}/*调整器*/;
//^^^^^^^^^^^^^^^^不需要这样做。
int main(){
自动新建窗口=glfwCreateWindow(1,1,“测试”,NULL,NULL);
glfwSetWindowSizeCallback(新建窗口,测试::调整大小);
返回0;
}

在页面顶部的搜索框中输入错误消息。我找不到任何与gflw Callbacks/
窗口相关的信息。请调整大小
/
,并确保声明
Resize()
静态
@jeana glfw与此无关。这是一个更普遍的问题。@user0042
此处可能未指定存储类
wen我将resize设置为静态,并
window.setResize(&window::resize)
给出
::必须是类或名称空间名称
谢谢您的支持,您能解释一下为什么会出现这种情况吗?查看GLFWwindowsizefun的typedef并没有发现它需要是静态的,如果函数是全局的,它就不是静态的等等,我现在还有一个问题,静态函数不能使用类变量,就像你需要专门化一个
GLFWwindow
类来创建
test
的实际实例一样。请参阅GLFW文档,了解如何做到这一点。什么?为什么?这个洞没用sense@jeana我不是GLFW专家,但这看起来像是与普通的C-API接口。您需要用测试类封装
GLFWwindow*
指针,将实例与
glfwCreateWindow()调用相关联。我怀疑这就是这些
NULL
ed参数的作用。
#include <GLFW/glfw3.h>
class test {
public:
    test(){}
    ~test(){}
    static void resize(GLFWwindow* window, int new_width, int new_height) {}
 // ^^^^^^
}  /*resizer*/;
// ^^^^^^^^^^^ No need for this.

int main(){
    auto newwindow = glfwCreateWindow(1, 1, "test", NULL, NULL);
    glfwSetWindowSizeCallback(newwindow, test::resize);

   return 0;
}