错误:从方法无效转换为void *

时间:2014-09-12 20:04:19

标签: c++

我正在尝试将方法强制转换为void指针,以便我可以将其用作回调方法。

void* pVoidedFunc = &testmethod;

但我收到错误:

error: invalid conversion from int (*)() to void*

方法是:

static int testmethod()
{
   return 0;
}

如何将方法转换为void指针?

1 个答案:

答案 0 :(得分:1)

该语言不允许将指向函数的指针自动转换为void指针。

以下是C ++草案标准(N3337)关于指针转换(强调我的)的说法:

  

4.10指针转换

     

2类型“指向 cv T的指针”,“其中T是对象类型的rvalue,可以转换为右值类型为“指向 cv void的指针。”将“指向 cv T的指针”转换为“指向的指针” cv void“指向类型为T的对象所在的存储位置的开头,就好像该对象是T类型的派生程度最高的对象(1.8) (即,不是基类子对象)。

功能不是对象。这在:

中说明
  

1.8 C + +对象模型

     

1 C ++程序中的构造创建,销毁,引用,访问和操作对象。 对象是存储区域。 [注意:函数不是对象,无论它是否以对象的方式占用存储。 ]

对象类型定义为:

  

3.9类型

     

9 对象类型是一种(可能是cv限定的)类型,它不是函数类型,不是引用类型,也不是void类型。