IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

Membre de classe non trouvé


Sujet :

C++

  1. #1
    Membre régulier
    Homme Profil pro
    Second de cuisine
    Inscrit en
    Avril 2005
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Second de cuisine
    Secteur : Alimentation

    Informations forums :
    Inscription : Avril 2005
    Messages : 193
    Points : 99
    Points
    99
    Par défaut Membre de classe non trouvé
    Bonjour,

    Mon compilo ne trouve pas le membre m_action pour le constructeur command, alors qu'il est juste au dessus de lui

    Quelqu'un saurait ce qui cloche ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     
    #ifndef ADMINCOMMANDCENTER_H
    #define ADMINCOMMANDCENTER_H
    #include <functional>
    #include <unordered_map>
    namespace game
    {
        typedef unsigned short account_level_t;
        enum AccountLevels: unsigned short
        {
            Player = 1,
            Intern,
            GM,
            Admin
        };
    }
    class AdminCommandCenter
    {
    public:
        typedef void(action_functor)(...);
        static void register_command(unsigned short command__, game::account_level_t level, const action_functor& action);
        template<typename... Args>
        static void execute(unsigned short command__, game::account_level_t level, Args&... args)
        {
            acc_iterator entry(m_actions.find(command__));
            if(entry == std::end(m_actions))
            {
                throw unknown_command();
            }
            if(level == game::AccountLevels::Player)
            {
                throw no_rights();
            }
            else if(level < entry->second.m_level)
            {
                throw bad_rights();
            }
            else
            {
                entry->second.m_action(std::forward<Args...>(args...));
            }
        }
        AdminCommandCenter() { }
        virtual ~AdminCommandCenter() {}
        class unknown_command
        {
        public:
            unknown_command() {}
            virtual ~unknown_command() throw() {}
        };
        class bad_rights
        {
        public:
            bad_rights() {}
            virtual ~bad_rights() throw() {}
        };
        class no_rights
        {
        public:
            no_rights() {}
            virtual ~no_rights() throw() {}
        };
        class command
        {
        public:
            const game::account_level_t m_level;
            const action_functor m_action;
            command(game::account_level_t l, const action_functor& f) : m_level(l), m_action(f) {}
            virtual ~command() {}
        };
    private:
        typedef std::unordered_map<unsigned short, command> acc_map;
        typedef acc_map::iterator acc_iterator;
        static acc_map m_actions;
    };
    #endif
    Erreur:
    prog.cpp: In constructor ‘AdminCommandCenter::command::command(game::account_level_t, void (&)(...))’:
    prog.cpp:67:81: error: class ‘AdminCommandCenter::command’ does not have any field named ‘m_action’
    Merci,
    nico

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Visual semble exiger la syntaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef void(*action_functor)(...);
    (testé sous Visual 2010 après avoir commenté la fonction execute() car il ne supporte apparemment pas les templates variadic)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre régulier
    Homme Profil pro
    Second de cuisine
    Inscrit en
    Avril 2005
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Second de cuisine
    Secteur : Alimentation

    Informations forums :
    Inscription : Avril 2005
    Messages : 193
    Points : 99
    Points
    99
    Par défaut
    Oui il faut vs2012 il me semble, mais la je suis sous ubuntu & c::b .
    Merci, c'était la solu ^^ !

  4. #4
    Membre régulier
    Homme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2006
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2006
    Messages : 48
    Points : 97
    Points
    97
    Par défaut
    Bonjour,

    Le problème a priori c'est la définition de ton type de pointeur de fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        typedef void(action_functor)(...);
    au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        typedef void(*action_functor)(...);
    Par contre, je ne m'aventurerais pas avec un pointeur "générique" de fonction comme ça... Ca revient un peu à utiliser void* .

  5. #5
    Membre régulier
    Homme Profil pro
    Second de cuisine
    Inscrit en
    Avril 2005
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Second de cuisine
    Secteur : Alimentation

    Informations forums :
    Inscription : Avril 2005
    Messages : 193
    Points : 99
    Points
    99
    Par défaut
    Oui, et en plus je ne pouvais finalement pas passer mes arguments, du coup :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        typedef void(*action_functor)(iopacket::Reader& packet);
    Problème résolu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Assembly] Classe non trouvée
    Par zsoh dans le forum Framework .NET
    Réponses: 2
    Dernier message: 11/09/2006, 13h03
  2. Classe non trouvé TWebBrowser
    Par Aloneghost dans le forum Web & réseau
    Réponses: 1
    Dernier message: 18/04/2006, 20h51
  3. [ORACLE9i][XML]:ORA-29540: classe non trouvée
    Par anaon dans le forum Oracle
    Réponses: 8
    Dernier message: 15/11/2005, 20h02
  4. [Plugin] Classe non trouvée au runtime
    Par toto_toto dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 15/02/2005, 10h36
  5. [debutant][Classpath][Linux] Classe non trouvée
    Par oghma777 dans le forum Général Java
    Réponses: 5
    Dernier message: 15/10/2004, 21h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo