2012-03-31 3 views
2

を動作するように望んでいない:ポインタ - この短いコードで

class X 
{ 
private: 
    class Y 
    { 

    public: 
     typedef void (X::* ptr_to_mem)(); 
     Y(X* parent,ptr_to_mem ptr):parent_(parent),ptr_(ptr) 
     {} 
     void run() 
     { 
      parent_->*ptr_();//at this line I'm getting an error 
     } 
    private: 
     X* parent_; 
     ptr_to_mem ptr_; 
    }; 

public: 
    void some_fnc() 
    { 
     cout << "some_fnc"; 
    } 

    void another() 
    { 
     Y y_(this,&X::some_fnc); 
     y_.run(); 
    } 

}; 

エラー:

error: must use '.*' or '->*' to call pointer-to-member function in '((X::Y*)this)->X::Y::ptr_ (...)', e.g. '(... ->* ((X::Y*)this)->X::Y::ptr_) (...)' 
+0

*コンパイルできない* –

+0

なぜコードを作成して読みにくいのですか?おっと - 忘れた - 仕事のセキュリティ –

+0

#癒し私はそれをするためにあなたの考え方を持たなければならないでしょう。 – smallB

答えて

6

は括弧の余分なペアを追加します。

(parent_->*ptr_)(); 

参照してください。 C++FAQ lite 33.6

+0

こんにちはマット、私は同じエラーが発生していると言っていた私の最後のコメントを削除しました。もちろんあなたの答えは正しいので、私はそれを受け入れます。私はその括弧を間違った場所に置いていました(親_ - > *)ptr_(); 。もう一度ありがとう。 – smallB

+0

問題ありません - シンタックスは、ファンキーな演算子で_and_writeを読むのは本当に難しいです:) – Mat

関連する問題