[C++] map - fonction

Discussion dans 'Web, design' créé par niafron, 28 Octobre 2003.

Statut de la discussion:
Fermée.
  1. Online
    niafron ex membre
    aaaah le cpp ... que du bonheur :D

    bon g une petite interrogation qui a germe dans ma tete

    mon probleme explike en qqmots

    g une map qui fait la relation entre un ordre et une action a faire

    le probleme : mes actions seront sous forme de fonction
    comment pouvoir associe la fonction a la map


    interpreter::my_order.insert(order::value_type(element, action));

    - interpreter : nom de ma classe
    - my_order : nom de ma map
    - order : typedef de la map

    si qqun a une idee pour eclairer ma pauvre lanterne, je l en remercie d avance
    niafron, 28 Octobre 2003
    #1
  2. Offline
    ben en fait, si j'ai bien compris, tu veux :


    |un ordre associé| à une action.|
    |"Fermer fenêtre"|this->Close();| par exemple

    Hé bien, pourquoi ne pas créer une classe d'actions...
    Comme ça ton action sera un objet.

    Sinon tu passes par une classe d'outils avec un constructeur définit en privé (pas d'instance de la classe) ou tu définis tes fonctions dans un espace de nom, dans un cas comme dans l'autre pour l'appeller tu fais maClasse::maFonction(...);
    ou monEspaceDeNom::maFonction(...); => utilisation de l'opérateur de résolution de portée.


    now, tu peux aussi créer un
    enum Actions {DORMIR, DEBOUT, FERMER, FRAGUER };
    Définir ensuite des "variables" correspondantes aux actions (comme des objets instances de leur classe)
    et via un switch(variableActions) { case: ... } définir le code
    des actions ou tout simplement faire l'appel de l'action qui se trouvera sous forme de méthode de classe, fonction ext ... ou autre.
    TITM4v3rick, 28 Octobre 2003
    #2
  3. Offline
    FoX2000 Revenant
    C'est quoi le rapport avec [HTML, PHP, Webdesign]?

    => :arrow:
    FoX2000, 28 Octobre 2003
    #3
  4. Offline
    En fait, un conteneur contient :D des objets ou des types primitifs ...


    genre une deque de nombre entiers c'est (via STL)

    int entier = 7;
    std::deque < int > listeEntiers;
    listeEntiers.push_back(5);
    listeEntiers.push_back(6);
    listeEntiers.push_back(entier);



    donc, il te faut des instances de classe, des types utilisateurs, ou encore des enumérations...
    TITM4v3rick, 28 Octobre 2003
    #4
  5. Online
    niafron ex membre
    merci bcp ;)


    edit : merci Mav je viens juste d avoir la revelation ( je dois avouer ke c t tres trouble ds mon esprit ) mais la c devenu clair

    merci bcp tu menleves une belle epine du pied ;)
    niafron, 29 Octobre 2003
    #5
  6. Online
    niafron ex membre
    ds la continuite du probleme


    g donc appliker ta methode : une classe utilitaire qui reprend toutes les actions possibles

    arrive la definition de la map

    typedef std::map<char, order_util> order;

    le probleme, il ne reconnais pas order_util comme etant une classe
    d:\programmation\cpp\Graftal\interpreter.h(12): error C2065: 'order_util' : undeclared identifier

    l include est bien present ;) et la classe ressemble a ceci

    Code:
    #ifndef _ORDER_UTILITY_H_
    #define _ORDER_UTILITY_H_
    
    #include "interpreter.h"
    #include "verbose.h"
    #include "define.h"
    
    class order_util {
    private:
    
    public:
    	// fct : ajout d'un dessin - appel la fonction draw de la tortue
    	position posPop(spos &my_stack);
    		// revenir a un point - depiler
    	void posPush(spos &my_stack);
    		// empiler des positions
    
    };
    
    #endif

    ma question : existe t il un namespace particulier pour le type classe ?



    ----------------------------

    bon apres avoir ecrit ces lignes, g tenter de faire

    typedef std::map<char, class::eek:rder_util> order;
    ( pour essayer )
    la le probleme ( et je vois pas trop ce que ca veut dire un global namespace ) est :
    d:\programmation\cpp\Graftal\interpreter.h(12): error C2039: 'order_util' : is not a member of 'operator``global namespace'''


    la je suis un peu :shock:

    au secouuuuuuur

    - la STL et moi on est pas encore fort copain;) -
    niafron, 29 Octobre 2003
    #6
  7. Offline
    typedef std::map<char, class::eek:rder_util> order;
    ...
    std::map < char, order_util > mesOrdres;

    dès lors que ta classe est définie, en écrivant "class::eek:rder_util", là tu appelles ta classe par elle-même... Enfin, avec l'include de l'entête de ta classe, le compil sait très bien que order_util est une classe ...

    vu que si tu faisais sur le côté :

    Code:
    #include "order_util.h"
    order_util unUtil;
    //ou encore
    order_util * utilDyn = new order_util;
    // ça fonctionnerait, si c n'est pas le cas : 
    /* alors faut vérifier ton ou tes constructeurs */

    ton conteneur doit contenir des objets d'un type primitif (char, char*, int, double etc...) ou d'un type définit par l'utilisateur.
    Il n'y a qu'à voir les types primitifs comme des types classes ...

    En fait dans ton construsteur, tu pourrais avoir comme paramètre la clé de ta map par exemple pour dire quel objet tu as besoin, enfin de savoir que cet objet là sait faire telle ou telle chose (méthode)



    genre, tu crées une classe TVecteur :

    Code:
    // t'oublies pas les inclusions #
    
    class TVecteur
    {
          int x, y;
          int direction;
       public:
          TVecteur();
          TVecteur(int deb, int fin, int dir);
           // ...
    };

    Si tu veux créer euh, un vecteur de TVecteur lol, tu feras :

    Code:
    #include <vector>
    #include "TVecteur.h"  // il est bien de nommer le fichier comme 
                                   // la classe
    
    std::vector < TVecteur > monVecteur2D;
    et non un std::vector < class::TVercteur > ;)


    (conceptuellement le vecteur 2D d'objets TPosition serait mieux, c'était juste pour se marrer...
    Note : un vector2D made in STL (enfin comme B.Stroup aime)
    std::vector < std::vector < TMonObjet > > vecteur2D;)
    TITM4v3rick, 29 Octobre 2003
    #7
  8. Offline
    PS : si tu utilses beucoup de conteneurs de la STL, tu peux
    faire un "using namespace std;"

    ça t'évite de devoir taper std:: pour atteindre ce que tu veux...
    ou alors, toujours en début de fichier, tu tapes "using std::CE_que_tu_veux_atteindre;"
    TITM4v3rick, 29 Octobre 2003
    #8
  9. Online
    niafron ex membre
    merci mav. :D

    en fait le probleme c que je mettais mon typedef dans mon .h et la il me dit flute. Dans le .cpp il comprend ce que je veux dire o_o" ( certaines choses resteront mysterieuses a mes yeux )
    ce qui est emmerdant :)
    niafron, 29 Octobre 2003
    #9
Statut de la discussion:
Fermée.