我正在编写一个界面(使用FLTK,但这没关系)。我做了一个按钮及其回调函数。在这个回调函数中,我需要在回调函数之外的变量中使用数据(在代码中是Myclass mc)。代码如下所示(我没有粘贴不必要的部分):
class Myclass
{
...
}
void button_callback( Fl_Widget* o, void* data)
{
Fl_Button* button=(Fl_Button*)o;
Myclass *a;
a=data;
a->MyMemberFunction();
}
int main()
{
Myclass mc;
...
Fl_Button button( 10, 150, 70, 30, "A button" );
button.callback( button_callback,&mc );
...
}
然而,在“a = data;”的地方我得到一个错误,说无效*无法分配给Myclass *,我该怎么办?
非常感谢!
答案 0 :(得分:3)
假设通过void*
传入的数据是指向Myclass
的指针,您需要从reinterpret_cast
添加void*
,如下所示:
Myclass *a = reinterpret_cast<Myclass*>(data);
这将告诉编译器您确定data
是指向Myclass
的指针,让您通过该指针调用MyMemberFunction()
。
答案 1 :(得分:1)
你需要使用任何类型的铸造:
这是C变种:
Myclass *a = (Myclass*)data;
这是C ++变体:
Myclass* a = reinterpret_cast<Myclass*>(data);