2015-10-08 40 views
0

要有一個結構:調用對象的方法(MSVC2010)

scheduled_call { 
    MyClass* object; 
    int value; 
    void (MyClass::*setter)(const int) 
} 

對於類:

MyClass { 
    void doSomething(const int); 
} 

結構編譯所有好,但是當我嘗試調用值的功能,它會拋出錯誤:

我需要執行保存在此結構中的調用。我嘗試這樣做:

void executeIt(scheduled_call cl) { 
    cl.object->*(cl.method)(cl.value); 
} 

,但我得到:

error C2064: term does not evaluate to a function taking 1 arguments 

我的編碼是基於C/C++ function pointer guide。我正在做這個作爲一個實驗,如果失敗,我可以回到switch當然聲明。

任何人都可以在Visual Studio 2010下編譯這個嗎?

+0

本帖](http://stackoverflow.com/questions/6262712/c-member-function-pointer-問題)(第二個答案具體)是成員函數指針語法的一個很好的參考。 – Carlton

回答

0

的問題是在方法調用的指針。這是錯誤

cl.object->*(cl.method)(cl.value); 

這是正確

(cl.object->*cl.method)(cl.value); 
1

您需要在您的struct提供有效的成員函數指針的定義:

scheduled_call { 
    MyClass* object; 
    int value; 
    void (MyClass::*method)(int); // <<<< 
} 
+0

你好,我真的很抱歉,我在寫這個問題的時候意外地創造了這個錯誤。我的實際代碼如下所示:void(ComplexStyle :: ValueCondition :: * setter)(const QString&);'編譯。不能編譯的是調用,而不是定義。 –

1
void MyClass::*method; 

是不是一個有效的函數指針類memeber功能。爲了得到我們需要

void (MyClass::*method)(int) 

的現在method是功能類似於MyClass::doSomething()

+0

如果它不是指向成員函數的指針,那麼它是什麼? – user463035818

+0

@ tobi303我不確定,因爲我還沒有看到這種語法。 – NathanOliver

+0

@ tobi303它會引用一個成員變量指針。 –