簡體   English   中英

C ++調用靜態函數指針

[英]C++ calling static function pointer

我想將回調轉發給函數指針。 所以我聲明了一個靜態(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 -??? );

static int (*m_Callback1)不會聲明函數指針,而只是指向int的指針:您忘記了參數列表。 你的意思是:

static int (*m_Callback1)();

int RegisterCallback1( int (*fct)() );

您尚未聲明函數指針,而已聲明普通數據指針。 您在聲明末尾缺少()。

您可以嘗試使用typedef作為回調函數的簽名來限制Oli和Dave指出的missing()錯誤: typedef int (*)() CallBack; 這至少具有讓您仔細考慮方括號的確切數目的優點,而不是讓您在代碼中使用該功能的每個地方考慮​​一下。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM