2013-12-17 50 views
1

這是一個後續問題我以前的帖子:C++: Initializing Struct and Setting Function PointerC++:成員函數指針內結構

我的新問題是,我怎麼叫結構內的指針到成員函數?我已經修改了我以前的代碼:

float MyClass::tester(float v){ 
    return 2.0f*v; 
} 

struct MyClass::Example{ 
    float(Scene_7::*MyFunc)(float); 

    float DoSomething(float a){ 
     return (MyFunc)(a);   //ERROR, SEE BELOW FOR OUTPUT 
    } 
}; 

然後我設定的功能如下,並將結果輸出到呼叫:

struct Example e; 
e.MyFunc = &MyClass::tester; 
std::cerr << e.DoSomething(1.0f) << std::endl; 

我得到以下錯誤:必須使用」。 '或' - >'來調用指向成員函數...

問題是我不知道如何做到這一點。我猜我必須在DoSomething之內調用像this->*(myFunc)(a)之類的東西,但this引用該結構。我已經嘗試搜索「這在結構指針到成員函數」,但一直未能找到任何東西。任何幫助或建議都會很棒。我覺得我很接近,但這只是語法問題。

回答

0

.*->*的運算符優先級是,恕我直言,破碎。您需要將操作數封裝在括號中以便調用。

return (this->*MyFunc)(a); 

否則,編譯器認爲你在​​做this->*(MyFunc(a)),這顯然是無效的。

有趣的是,作爲獨立表達的(this->*MyFunc)也是無效的。它需要當場打電話。

0

我不能告訴你,如果有其他錯誤的,這樣做缺乏的代碼,但你調用一個成員函數走錯了路,你叫他們像這樣:

return (obj->*MyFunc)(6); 

我不知道,如果你可以使用this代替上述行上的obj,因爲從聲明開始,您需要一個指向Scene_7類型對象的指針,因此您需要知道代碼中該位置的正確類型的指針..

0

請記住。運算符的優先級高於*運算符。因此,在處理pointes和structs等時,您需要使用pamentalhesis或 - >運算符,這意味着指針指向什麼。