bonjour,

j'ai une classe qui symbolise le tri par catégorie et sous-catégories d'éléments diverses. Elle est basée
sur le conteneur std::map. je n'arrive pas à insérer des éléments dans la map des sous-catégories (problèmes de syntaxe, crash... je sais pas trop)

déclaration de ma classe :

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
 
class CTri
{
public:
 
    CTri();
   ~CTri();
 
    void add(const cstd::cString& categorie);
    void add(const cstd::cString& categorie, const cstd::cString& sous_categorie);
 
    // ...
 
private:
 
    std::map<cstd::cString, cstd::cTypes::DWORD> _M_categorie_map;
    std::map<cstd::cTypes::DWORD, std::map<cstd::cString, cstd::cTypes::DWORD> > _M_sous_categorie_map;
 
};
les définitions :

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
 
typedef std::map<cstd::cString, cstd::cTypes::DWORD>::const_iterator categorie_map_const_iterator;
typedef std::map<cstd::cTypes::DWORD, std::map<cstd::cString, cstd::cTypes::DWORD> >::const_iterator sous_categorie_map_const_iterator;
 
void
CTri::add(const cString& categorie) // ok ça fonctionne
{    
    if (_M_categorie_map.find(categorie) == _M_categorie_map.end())
    {
        _M_last_index_categorie++;
        _M_categorie_map[categorie] = _M_last_index_categorie;
    }
}
 
void
CTri::add(const cstd::cString& categorie, const cstd::cString& sous_categorie)
{
    categorie_map_const_iterator it_categorie;
    sous_categorie_map_const_iterator it_sous_categorie;
    cTypes::DWORD last_index_sous_categorie = 0;
    map<cString, cTypes::DWORD> m;
 
    add(categorie);
    it_categorie = _M_categorie_map.find(categorie);
    last_index_sous_categorie = getIndexMaxSousCategorie((*it_categorie).second);
 
    it_sous_categorie = _M_sous_categorie_map.find((*it_categorie).second);
    last_index_sous_categorie++;
 
     // première méthode:
     // (*it_sous_categorie).second[sous_categorie] = last_index_sous_categorie; <- le compilo il aime pas
 
     // deuxième méthode : 
     m = (*it_sous_categorie).second;						 <-au deuxième appel j'ai une violation d'accès
     m[sous_categorie] = last_index_sous_categorie;
}
je ne vois pas pourquoi ça crash...et si je pouvais me débarraser de 'map<cString, cTypes:WORD> m' ça serait mieux.
si qqn pouvait m'expliquer ce qui se passe (ou se passe pas)...merci