2012-12-28 18 views
1

Possible Duplicate:
How to call a function using pointer-to-member-function不能使用函數指針

Analyzer.h

class Analyzer 
{ 
public : 

    void viku(); 
    void Bibek(); 
    void vivek(); 
    void (Analyzer::*point)(); 

    Analyzer(){ 

    } 
    ~Analyzer(){ 

    } 

}; 

Analyzer.cpp

using namespace std  
    #include"Analyzer.h" 
    void Analyzer::viku(){ 
     cout<<"Hello viku"; 
    } 
    void Analyzer::vivek(){ 
     point =&Analyzer::viku; 
     Bibek(); 
    } 
    void Analyzer::Bibek(){ 
      point();//Errror 
     cout<<"Bibek"; 
    } 

調用一個函數在編譯過程中它顯示了以下錯誤:

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

任何人都可以請告訴我如何避免這種情況?

+2

你應該瞭解指針到成員在你閱讀本書的章節函數,因爲這不是一個正常的函數指針。 -1沒有事先研究。 –

+0

我讀過它,但仍然無法找出這就是爲什麼我在這裏發佈這個。 據我說,我已經做了一切正確 1 - 函數指針和函數的簽名是相同的。和調用慣例。那麼我在哪裏得到這個問題? – Kenta

+1

與您的問題沒有關係,但很重要:避免在頭文件中使用'namespace',更好:不要使用它。它可能會導致命名衝突。 – stefan

回答

3

指向成員函數的指針與正常函數指針不同。你需要一個實例來調用它們:

#include <iostream> 

class A 
{ 
public: 
    int foo() 
    { 
     std::cout << "A::foo here, you can have 42" << std::endl; 
     return 42; 
    } 
}; 

int main() 
{ 
    int (A::* point)() = &A::foo; 
    A a; 

    (a.*point)(); 
} 

在你的情況,你需要做類似如下:

(this->*point)()