2015-10-08 80 views
-2

我對C++很感興趣(在很多Java年之後)。 我試圖用一個函數指針上我的課的這樣一個成員函數:在成員函數上調用函數指針

class MyClass 
{ 
public: 
    MyClass(); 
    void foo(); 
    void bar(); 
}; 

MyClass::MyClass(){} 

void MyClass::bar(){} 


void MyClass::foo() 
{ 
    void (MyClass::*myMethod)(); 
    myMethod = &MyClass::bar; 

//-----THIS IS THE LINE WITH PROBLEM----------- 
    myMethod(); 

} 

但是,編譯失敗:

test.cpp: In member function ‘void MyClass::foo()’: 
test.cpp:22:14: error: must use ‘.*’ or ‘->*’ to call pointer-to-member function in ‘myMethod (...)’, e.g. ‘(... ->* myMethod) (...)’ 
    myMethod(); 
     ^

我一直試圖*的各種組合, &個字符,並搜索解決方案,但不能得到它的工作。

任何想法?

+2

將「如何調用成員函數指針C++」粘貼到Google中。今天一定是你的幸運日,因爲這是第一個結果! –

+0

錯誤消息字面上告訴你該怎麼做......你在任何階段都考慮閱讀嗎? –

+1

哇,夥計們,爲什麼會有這種惡性?是的,我閱讀了錯誤信息,是的,我用Google搜索了它。對不起,但正確的結果是下面接受的答案,它不是答案,這個問題已被標記爲複製。另一個答案是:(bigCat。* pcat)();這個答案是:(this - > * myMethod)();有細微的差別(「。」而不是「 - >」和「this」而不是實際的變量名稱)。這些細微的差異很難找到像我這樣的C++新手。因此張貼在這裏。 – muslidrikk

回答

5

myMethod是一個成員函數,所以你需要在它所屬的類的實例上調用它。既然你已經在一個成員函數,你可以使用this

(this->*myMethod)() 
0

的語法使用指針成員需要作用於物體。

代替myMethod(),執行類似

MyClass *objectptr = pointer_to_some_valid_object(); 
(objectptr->(*myMethod))(); 

MyClass &objref = reference_of_some_valid_object(); 
(objref.(*myMethod))(); 

在兩種情況下,該對象被指向的(第一種情況)或稱爲(第二種情況),必須仍然存在於調用該方法。