2009-06-18 15 views
1

は、私は、このようなファイルがあります:名前空間のクラスと構造体

namespace myName 
{ 
    typedef HRESULT (*PFN_HANDLE)(myName::myStruct); 

    class MyClass{ 
    //... 
    public: 
    BOOL RegisterCallback (PFN_HANDLE foo); 
    //... 
    }; 

    struct myStruct{ 
    //... 
    }; 
} 

をしかし、私はコンパイルエラーを取得しています「体mystruct」「がmyName」のメンバではありません。誰が何が起こっているか教えてくれますか?私のヘッダファイルに構造体を宣言しても構いません。名前空間の問題ですか?そんなに密集して申し訳ありません。

答えて

6

宣言する前に、型名myStructを使用しようとしています。どちらのtypedefの前に全体の構造体の定義を置く、またはtypedefの前にこの宣言を置く:

struct myStruct; 

これは、「前方宣言」として知られています。それは後でその名前の型があることをコンパイラに伝えますが、その型がどのように定義されているかは正確には言いません。

+0

私のデルファイの日を思い起こさせます –

+0

@ Malcolm - C++を書き始める人のほとんどは、ある時点で前方宣言の問題で噛まれてしまいます。 –

関連する問題