使用void *传递变量

时间:2013-12-27 01:06:22

标签: c++ callback void-pointers

我正在编写一个界面(使用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 *,我该怎么办?

非常感谢!

2 个答案:

答案 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);