1

重複の可能性:
メンバー関数へのポインターを使用して関数を呼び出す方法

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";
    }

コンパイル中に次のエラーが表示されます。

エラー C2064: term は引数を 0 個取る関数として評価されません。

これを回避する方法を誰か教えてください。

4

1 に答える 1

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)()
于 2012-12-28T11:58:25.100 に答える