none
une classe qui n'est pas reconnue RRS feed

  • Question

  • bonjour

    Dans ma recherche d'une solution standard pour le SpecificationLoader J'ai une implémentation sur le portable et je n'arrive pas à compiler.

    Je m'appuie sur un fichier d'include qui définie une classse:

    #ifndef CMorph_H #define CMorph_H namespace SpecificationLoader { using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; using namespace System::IO;

    class CMorph { public: CMorph::CMorph(); CMorph::~CMorph(); static int CMorph::morphinit(void); /* Close exception list files and reopen */ static int CMorph::re_morphinit(); /* Try to find baseform (lemma) of word or collocation in POS. */ static char *CMorph::morphstr(char *, int); /* Try to find baseform (lemma) of individual word in POS. */ static char *CMorph::morphword(char *, int); static int CMorph::do_init(void); static char* CMorph::strtolower( char *str); private: static char* CMorph::WsCanonWord( int offset, int count, int pos, char* word, char* end); static int CMorph::strend(char *str1, char *str2); static char *CMorph::wordbase(char *word, int ender); static int CMorph::hasprep(char *s, int wdcnt); static char *CMorph::exc_lookup(char *word, int pos); static char *CMorph::morphprep(char *s); }; };

    Je pense que la déclaration de la Classe CMorph est correcte

    Mais j'essaie d'y faire reférence dans un autre fichier et je code

    CMorph::strtolower(( wnbuf);

    Le compilateur me reponds

    error C2653: 'CMorph' n'est pas un nom de classe ni d'espace de nom
    Je m'arrache les cheveux devant ce diagostique


    Jean Noël Martin

    samedi 11 avril 2015 07:32

Réponses

  • >Je pense que la déclaration de la Classe CMorph est correcte

    On en est loin, très loin !

    Erreurs bloquantes :

    - Il est où le #endif de l'include-guard ???

    - Qu'une méthode soit static ou pas, lors de sa déclaration dans la déclaration de la classe, on ne mets pas le nom de la classe, vois avez donc 12 "CMorph::" à supprimer.

    - Comme CMorph est déclaré dans le namespace SpecificationLoader, lors de l'appel à CMorph::strtolower, avez-vous bien utilisez un "using" pour injecter ce namespace dans l'espace de nom anonyme, ou le code appelant fait aussi parti du namespace SpecificationLoader.

    - Lors de l'appel, il y a une "(" en trop.

    Erreurs de style :

    - Autant de "char*" dans une classe C++, en sachant que la classe std::string existe depuis plus de 20 ans, (17 ans dans la norme), ça donne la nausée.

    - Ca fait aussi facilement 20ans qu'on ne préfixe plus les classes par un C majuscule.

    - des fonctions init_machin, c'est très très suspect en dehors de certain Design Pattern très particulier.

    - strtolower??? : vous seriez pas en train de refaire une roue carrée par hasard http://www.cplusplus.com/reference/locale/tolower/ ?

    - Une classe qui n'a que des méthodes statiques en plus de son constructeur et destructeur, ça sent très fort la grosse erreur de conception. Il existe des fonctions libres en C++.

    ...


    Paul Bacelar, Ex - MVP VC++

    • Marqué comme réponse JeanNoel53 dimanche 12 avril 2015 04:57
    dimanche 12 avril 2015 00:53
    Modérateur

Toutes les réponses

  • >Je pense que la déclaration de la Classe CMorph est correcte

    On en est loin, très loin !

    Erreurs bloquantes :

    - Il est où le #endif de l'include-guard ???

    - Qu'une méthode soit static ou pas, lors de sa déclaration dans la déclaration de la classe, on ne mets pas le nom de la classe, vois avez donc 12 "CMorph::" à supprimer.

    - Comme CMorph est déclaré dans le namespace SpecificationLoader, lors de l'appel à CMorph::strtolower, avez-vous bien utilisez un "using" pour injecter ce namespace dans l'espace de nom anonyme, ou le code appelant fait aussi parti du namespace SpecificationLoader.

    - Lors de l'appel, il y a une "(" en trop.

    Erreurs de style :

    - Autant de "char*" dans une classe C++, en sachant que la classe std::string existe depuis plus de 20 ans, (17 ans dans la norme), ça donne la nausée.

    - Ca fait aussi facilement 20ans qu'on ne préfixe plus les classes par un C majuscule.

    - des fonctions init_machin, c'est très très suspect en dehors de certain Design Pattern très particulier.

    - strtolower??? : vous seriez pas en train de refaire une roue carrée par hasard http://www.cplusplus.com/reference/locale/tolower/ ?

    - Une classe qui n'a que des méthodes statiques en plus de son constructeur et destructeur, ça sent très fort la grosse erreur de conception. Il existe des fonctions libres en C++.

    ...


    Paul Bacelar, Ex - MVP VC++

    • Marqué comme réponse JeanNoel53 dimanche 12 avril 2015 04:57
    dimanche 12 avril 2015 00:53
    Modérateur
  • Ce code n'est pas de moi il s'agit d'un shareware WordNet (vous connaissez)

    Jean Noël Martin


    • Modifié JeanNoel53 dimanche 12 avril 2015 04:07
    dimanche 12 avril 2015 03:52