将回调函数移动到类会导致错误

Moving callback function to a class causes an error!

本文关键字:错误 回调 函数 移动      更新时间:2023-10-16

在我将一些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作为一种静态方法。