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

SL & STL C++ Discussion :

Pb de link sur std::map


Sujet :

SL & STL C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 224
    Par défaut Pb de link sur std::map
    Bonjour,

    Tout d'abord voici le code (très simple):
    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
     
    // RuleTest.cpp : Defines the entry point for the console application.
    //
     
    #include <iostream>
    #include <map>
    #include <string>
    #include "stdafx.h"
     
    class RuleType{
    public:
        RuleType(int anId, std::string aName): id (anId), name (aName) {}
    protected:
        int id;
        std::string name;
     
    private:
        RuleType();
        static std::map< int, RuleType*> rules;
     
    public:
        virtual int getID() {return id;}
        virtual std::string getName() {return name;}
        static void insertRule(int i, RuleType* rule) {rules[i] = rule;}
        static RuleType * getRule(int i) {return rules[i];}
    };
     
     
    class Rule1: public RuleType{
    public:
        Rule1(int anId, std::string aName): RuleType(anId, aName) {}
     
    private:
        Rule1();
        int idRule;
     
    public:
        int performRule(int i) {return i;}
    };
     
    class Rule2: public RuleType{
    public:
        Rule2(int anId, std::string aName): RuleType(anId, aName) {}
     
    private:
        Rule2();
        int idRule;
     
    public:
        std::string performRule(std::string str) {return str;}
    };
     
    int _tmain(int argc, _TCHAR* argv[])
    {
        Rule1 * rule1 = new Rule1(1, "Rule1");
        Rule2 * rule2 = new Rule2(2, "Rule2");
        RuleType::insertRule(rule1->getID(), rule1);
        RuleType::insertRule(rule2->getID(), rule2);
     
        Rule1 * ruletmp1 = dynamic_cast< Rule1 * > (RuleType::getRule(1));
        std::cout << "Rule1: " << ruletmp1->performRule(1) << std::endl;
     
        Rule2 * ruletmp2 = dynamic_cast< Rule2 * > (RuleType::getRule(2));
        std::cout << "Rule2: " << ruletmp2->performRule("Rule2") << std::endl;
     
        int i;
        std::cin >> i;
    	return 0;
    }
    qui me donne cette erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Error	1	error LNK2001: unresolved external symbol 
    "private: static class std::map<int,class RuleType *,struct std::less<int>,class std::allocator<struct std::pair<int const ,class RuleType *> > > RuleType::rules"
     (?rules@RuleType@@0V?$map@HPAVRuleType@@U?$less@H@std@@V?$allocator@U?$pair@$$CBHPAVRuleType@@@std@@@3@@std@@A)	RuleTest.obj
    Je comprend pas vraiment pkoi j'ai cette erreur de compilation...

    De plus je pense avoir un gros problème de conception, car je dois utiliser des dynamic_cast.
    Le gros problème vient que je dois définir des règles différentes Rule1, Rule2, qui ont une fonction de base performRule qui peut prendre des paramêtres differents mais surtout retourne des types différents. Ceci m'empeche de definir RuleType comme abstraite avec la fonctions performRule en virtuelle pure.

    Auriez vous des idées de conception pour résoudre ce problème.

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par défaut
    Citation Envoyé par escafr Voir le message
    Je comprend pas vraiment pkoi j'ai cette erreur de compilation...
    La variable rules est déclarée mais nul part définie.

    De plus je pense avoir un gros problème de conception, car je dois utiliser des dynamic_cast.
    Le gros problème vient que je dois définir des règles différentes Rule1, Rule2, qui ont une fonction de base performRule qui peut prendre des paramêtres differents mais surtout retourne des types différents. Ceci m'empeche de definir RuleType comme abstraite avec la fonctions performRule en virtuelle pure.

    Auriez vous des idées de conception pour résoudre ce problème.
    Difficile de répondre sans avoir toutes les données du problème. Pourquoi ne pas utiliser une map<int, Rule1> et une map<int, Rule2> par exemple ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 224
    Par défaut
    Citation Envoyé par Sylvain Togni Voir le message
    La variable rules est déclarée mais nul part définie.
    erreur de base dsl :p
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::map<int, RuleType*> RuleType::rules;
    avc ca, ca marche bcp mieux en effet

    Citation Envoyé par Sylvain Togni Voir le message
    Difficile de répondre sans avoir toutes les données du problème. Pourquoi ne pas utiliser une map<int, Rule1> et une map<int, Rule2> par exemple ?
    Pq je veux pouvoir lister toutes mes regles, enfin tous les parametres de mes regles à savoir id et name avec un for par exemple et que potentiellement je peux avoir 50 Rule differentes.

    je vais faire un autre topic pour le pb de conception

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

Discussions similaires

  1. SIGSEGV sur une std::map::find();
    Par DakM dans le forum Langage
    Réponses: 4
    Dernier message: 31/03/2012, 10h29
  2. Réponses: 3
    Dernier message: 02/02/2009, 19h13
  3. Question sur les std::map
    Par tlemcenvisit dans le forum SL & STL
    Réponses: 6
    Dernier message: 30/10/2008, 12h11
  4. Question sur std::map
    Par tlemcenvisit dans le forum SL & STL
    Réponses: 2
    Dernier message: 27/10/2008, 16h35
  5. [Std::map] Question sur les clés
    Par Kreeg dans le forum SL & STL
    Réponses: 1
    Dernier message: 26/02/2008, 22h32

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