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;
}