将回调函数移动到类会导致错误
Moving callback function to a class causes an error!
在我将一些OpenGL代码从主函数移到一个新类后,我在以下行出现了以下错误:
glutDisplayFunc(OnDisplay);
错误C3867:"Room::OnDisplay":函数调用缺少参数列表;使用'&Room::OnDisplay'创建指向成员的指针
我的错是什么?
glutDisplayFunc
需要一个void (*func)(void)
,但您传递的是void (Room::*func)(void)
。
由于类方法接收隐式this
参数,因此它们的指针类型与常规函数指针有根本不同。它们之间不可能转换。
您所能做的就是使OnDisplay
成为Room
的静态成员。从那里,您可以将调用转发到一个具体Room实例的成员函数(由于设计中只有一个供过于求的显示回调,并且您是从过程代码迁移过来的,所以我认为您在某个地方只有一个Room
对象(。
glutDisplayFunc
只获取指向函数的指针。当将OnDisplay
移动到类中时,在实际被调用时,还将把隐藏参数this
传递给glutDisplayFunc
。
一种可能的解决方案是将OnDisplay
作为一种静态方法。
相关文章:
- MSVC __debugbreak() 与 openGL 错误回调一起使用时不会产生调用堆栈
- 调用 java 的回调() 时应用程序崩溃.由于 detatchThread 而获得运行时错误
- 通过实用程序 fn 将捕获的 lambda 传递给 C 样式回调 - 错误
- 更新 Visual Studio 2017,现在出现编译错误 C7510:"回调":使用依赖模板名称必须以 'template' 为前缀
- 调用某个回调函数两次会导致分段错误:Nan
- 从C++代码抛出错误调用 JavaScript 回调函数 - nbind
- 回调方法显示错误,类型为"void(*)"的值不能用于初始化类型的实体
- OpenGL 调试 错误回调函数的 ID 参数是什么?
- 从触摸回调访问向量元素的方法时,不良访问错误
- 插件中节点.js/Nan 回调C++不频繁的隔离错误
- std::函数,带有 SDL 事件回调的 lambda 错误
- clang消毒剂回调错误
- 带有回调函数的cocos2d-x菜单项错误
- 通过功能指针通过DLL进行回调功能,运行时检查失败#0错误
- pybind11基本回调,不兼容的功能签名错误
- C 11 std :: bind and auto的编译错误,用于回调函数参数
- C++ - 在 C++ 中实现回调时的允许错误
- 调用带参数的方法时出现本机回调错误
- 在 Python 中扩展的 C++ 类中的 Seg 错误回调问题
- C++和Lua-无保护错误(错误回调)?这怎么可能