2012-03-20 15 views
0

メンバー関数へのポインタを、後でプログラムで関数を呼び出すために使用する構造体に格納しようとしています。メンバー関数をC++で関数ポインタとして格納する際にエラーが発生しました

// abc.h 
namespace XYZ { 
typedef void func(const uint8_t *buf, int len); 
struct holder 
{ 
    // other members 
    func * storePtr; 
} 
} // end of namespace 

他のファイルのように:このような

何か

// pqr.h 
#include abc.h 
namespace XYZ { 
class pqr { 
    // data members and other functions 
    void func1(const uint8_t *buffer, int length); 
    void func2(func *section); 
    void func3(); 
    } 
} // end of namespace 

は今私のcppファイルには、私の構造体メンバーstorePtr

// app.cpp 
#include pqr.h 
void pqr::funct3() 
{ 
    // Do something 
    func2(func1); 
} 
void pqr::func2(func * section) 
{ 
    holder h; 
    h.storePtr = section; 
} 

にこの関数func1のインスタンスを保存する必要がありますしかし、 "func2(func1);という行でコンパイルエラーが発生しています。 「エラーC3867: 『PQR :: func1の』:引数リストを欠落している関数呼び出し、使用 『& PQR :: func1の』メンバへのポインタを作成する」として、私が使用している

を& PQR ::範囲を定義するのではなく、それはまた私の問題を解決しないし、私は何をすべきか理解できません。メンバ関数へ

答えて

1

ポインタは、通常の関数へのポインタと同じものではありません - ここでの説明と例を見てみましょう:私は構造体に格納されている関数ポインタからメンバ関数を呼び出しますかhttp://msdn.microsoft.com/en-us/library/k8336763.aspx

+0

しかし、 ? 作成した構造体を保存し、それを後で使用して関数を呼び出すとします。 – Garfield

+1

静的でないメンバ関数の場合は、常にオブジェクトを呼び出す必要があります。オブジェクトは関数の暗黙のパラメータです。構造体にオブジェクトとポインタを保存するか、静的なメンバを使うことができるように全体のアーキテクチャを変更するか、単純な関数を使用します。 – MiMo

関連する問題