2011-11-22 17 views
0

私はクラスを以下のように実装しました。コンストラクタで、コンパイルエラーが発生します。あなたは私の理由を教えてくれますか?メンバーの関数ポインタエラー

class A{ 

public: 
    typedef void (A::*HANDLER)(); 
    void test1(){ 
     printf("This is test 1"); 
    } 
    void test2(){ 
     printf("This is test 2"); 
    } 

    A(){ 
     HANDLER h= &A::test1; 
     h(); // an error spawn here with the description: term does not evaluate to a function taking 0 arguments 
    } 
}; 
あなたが使用する必要があります

答えて

0

、このようにメンバ演算子->*へのポインタ:あなたのコードサンプルの

(this->*h)(); 

Online Demo

0

g++エラーメッセージがより有益である:確かに

bar.cc: In constructor 'A::A()': 
bar.cc:15:11: error: must use '.*' or '->*' to call pointer-to-member function in 'h (...)', e.g. '(... ->* h) (...)' 

そして、あなたが(this->*h)();にお電話を変更した場合、それはコンパイラに渡します。