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

时间:2011-04-28 21:34:27

标签: c++ callback

在我将一些OpenGL代码从main函数移动到一个新类后,我在下一行出现了以下错误:

glutDisplayFunc(OnDisplay);
  

错误C3867:'Room :: OnDisplay':函数调用缺少参数列表;使用'& Room :: OnDisplay'创建指向成员的指针

我的错是什么?

2 个答案:

答案 0 :(得分:4)

glutDisplayFunc需要void (*func)(void),但您传递的是void (Room::*func)(void)

由于类方法接收隐式this参数,因此它们的指针类型与常规函数指针根本不同。它们之间无法转换。

您所能做的就是让OnDisplay成为Room的静态成员。从那里你可以将调用转发给具体Room实例的成员函数(因为设计中只有一个过量显示回调,你从过程代码迁移,我假设你在某个地方只有一个Room对象)。

答案 1 :(得分:2)

glutDisplayFunc只是指向函数的指针。将OnDisplay移至课程时,您还会在实际调用时将隐藏的参数this传递给glutDisplayFunc

一种可能的解决方案是将OnDisplay作为静态方法。