2016-10-26 10 views
0

私は他のクラスのメソッドへのポインタで初期化されたメソッドを呼び出そうとしていますが、私はthis: に従っています。ポインタで初期化されたコールクラスメソッド

class y 
{ 
    public: 
     int GetValue(int z) 
     { 
      return 4 * z; 
     } 
}; 


class hooky 
{ 
    public:  
     int(hooky::*HookGetValue)(int); 
}; 


int(hooky::*HookGetValue)(int) = (int(hooky::*)(int))0x0; // memory address or &y::GetValue; 



int main() 
{ 
    hooky h; // instance 
    cout << h.*HookGetValue(4) << endl; // error 
    return 0; 
} 

生成エラーは次のとおりです:

は、この検討し

[エラー]」を使用しなければなりません。 ''または ' - >'と入力して、 'HookGetValue(...)'のメンバー関数へのポインタを呼び出します。 '(... - > * HookGetValue)(...)'

+1

として表示されることを意味し、どの私はあなたが '(H。* HookGetValue)を書き込む必要がありますね(4)'の代わりに? –

+0

@AdrianShumは大変感謝していますが、なぜ機能するのですか?私に言うことができますか?私は同じであるかどうか分からない。 – nikomaster

+1

私の更新をチェック –

答えて

1

メンバ関数ポインタを呼び出すための正しい構文は

(h.*HookGetValue)(4) 

です更新:元のコードがない理由C++の演算子の優先順位のために期待通りに動作します。関数呼び出し()は、メンバー.*に対してptrより高い優先順位を持っています。

h.*HookGetValue(4) 

h.*(HookGetValue(4)) 
関連する問題