2009-06-18 6 views
1

나는 다음과 같습니다 파일이 있습니다네임 스페이스의 클래스와 구조체

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

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

    struct myStruct{ 
    //... 
    }; 
} 

을하지만 컴파일 오류 'MYSTRUCT가'MyName로 '의 멤버가 아닙니다 얻고있다. 아무도 나에게 무슨 일이 일어나는지 말해 줄 수 있니? 내 헤더 파일에 구조체를 선언해도 괜찮습니까? 네임 스페이스 문제입니까? 나는 너무 조밀하게 유감 스럽다.

답변

6

선언하기 전에 myStruct 형식 이름을 사용하려고합니다. 어느 타입 정의하기 전에 전체 구조체 정의를 넣어, 또는 형식 정의하기 전에이 선언을 넣어 :

struct myStruct; 

이것은 "앞으로 선언"로 알려져있다. 컴파일러에게 나중에 그 이름을 가진 타입이있을 것이라고 알려주지 만, 그 타입이 어떻게 정의되는지 정확히 말하지는 않습니다.

+0

은 내 델파이의 날을 생각 나게합니다. –

+0

@ Malcolm - 거의 모든 사람이 C++을 작성하기 시작하면 거의 어느 시점에서 앞으로 선언문 문제에 물린 것입니다. –

관련 문제