2009-06-18 3 views
1

J'ai un fichier qui ressemble à ceci:classe namespace et struct

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

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

    struct myStruct{ 
    //... 
    }; 
} 

Mais je reçois une erreur de compilation « myStruct » est pas un membre de « myName ». Quelqu'un peut-il me dire ce qui se passe? Il est correct de déclarer une structure dans mon fichier d'en-tête, n'est-ce pas? Est-ce un problème d'espace de noms? Je suis désolé d'être si dense.

Répondre

6

Vous essayez d'utiliser le nom de type myStruct avant de l'avoir déclaré. Soit mettre la définition toute struct avant la typedef, ou mettre cette déclaration devant le typedef:

struct myStruct; 

Ceci est connu comme une « déclaration avant ». Il indique au compilateur qu'il y aura plus tard un type avec ce nom, mais ne dit pas exactement comment ce type est défini.

+0

me rappelle mes jours delphi –

+0

@ Malcolm - Presque tout le monde qui commence à écrire en C++ est mordu par des problèmes de déclaration avant à un moment donné. –