1

我想将回调转发给函数指针。所以我声明了一个静态(int*) m_pointer1,以及一个方法void RegisterCallback1((int*)fct)

在 class1.h 中:

public:
   int RegisterCallback1( int (*fct) );
private:
   static int (*m_Callback1);

在 class1.cpp 中:

int class1::RegisterCallback1( int (*fct) )
{
    m_Callback1= fct;
}

然后,我想将回调转发给函数指针:

void class1::Callback1()
{
   (*m_Callback1)();
}

但是我得到一个编译器错误“表达式必须具有(指向)-函数类型我遵循教程并阅读了函数指针,他们似乎这样做没有任何问题。任何想法为什么?

编辑:所以,我声明 (int*)(void)m_Callback1 -Visual Studio 需要一个 void ...- 那么如何使用参数调用 registerCallback 函数?

class1.RegisterCallBack1(  ??? - class2::callback -??? );
4

3 回答 3

7

static int (*m_Callback1)不声明函数指针,只是指向 int 的指针:您忘记了参数列表。你的意思是:

static int (*m_Callback1)();

int RegisterCallback1( int (*fct)() );
于 2012-04-24T19:19:08.203 回答
6

你还没有声明一个函数指针,你已经声明了一个普通的数据指针。您在声明末尾缺少 () 。

于 2012-04-24T19:19:01.013 回答
1

您可以尝试通过使用 typedef 作为回调函数的签名来限制 Oli 和 Dave 指出的缺失 () 错误:typedef int (*)() CallBack;这至少具有让您考虑括号的精确数量而不是在每个点上的优点您使用此类功能的代码。

于 2012-04-24T19:28:05.393 回答