web-dev-qa-db-ja.com

メンバー関数ポインターを介して呼び出す方法は?

メンバー関数ポインターを使用していくつかのテストを実行しようとしています。このコードの何が問題になっていますか? bigCat.*pcat();ステートメントはコンパイルされません。

class cat {
public:
   void walk() {
      printf("cat is walking \n");
   }
};

int main(){
   cat bigCat;
   void (cat::*pcat)();
   pcat = &cat::walk;
   bigCat.*pcat();
}
55

さらに括弧が必要です。

(bigCat.*pcat)();
^            ^

関数呼び出し(())は、メンバーへのポインター結合演算子(.*)。単項演算子は、二項演算子よりも優先順位が高くなります。

91
James McNellis