【发布时间】:2017-11-26 10:26:27
【问题描述】:
我创建了一个名为 InputControl 的类。我正在使用一个名为 GLFW 的库和一个函数 glfwSetKeyCallback。函数定义为:
GLFWkeyfun glfwSetKeyCallback(GLFWwindow * 窗口,GLFWkeyfun cbfun)
Typedef如下:
typedef void(* GLFWkeyfun) (GLFWwindow *, int, int, int, int)
问题是我无法将我的方法转换为函数指针。我觉得我已经尝试以各种可能的方式投射它。我不确定我还需要如何转换此方法。是否有特定于将相对方法作为函数指针传递的东西? 我的代码如下:
#pragma once
#include <GLFW/glfw3.h>
#include "config.h"
class InputControl {
public:
void bind();
void unbind();
private:
void __glfw__keycallback_bind(GLFWwindow* window, int key, int scancode, int action, int mods);
};
输入控制.cpp
void InputControl::bind() {
glfwSetKeyCallback(__application__window, __glfw__keycallback_bind);
}
void InputControl::unbind() {
}
void InputControl::__glfw__keycallback_bind(GLFWwindow * window, int key, int scancode, int action, int mods) {
//... other code here
}
Visual Studio 给我以下错误
“void (InputControl::*)(GLFWwindow *window, int key, int scancode, int action, int mods)”类型的 E0167 参数与“GLFWkeyfun”类型的参数不兼容
【问题讨论】:
-
无法将非静态类方法指针转换为常规函数指针。这些是完全不同且不相容的实体。停止尝试这样做。不幸的是,您的问题没有提供足够的上下文来提供替代解决方案。实际的
InputControl对象将驻留在哪里? -
与您的问题无关,但不要使用两个前导下划线定义名称或符号。这些是为所有范围内的编译器和标准库保留的。请参阅this old question and its answers 了解更多信息。
-
扩展@AnT 的评论。方法作用于类的实例。常规函数无法确定要作用于哪个实例。