Bonjour,
j'ai un problème quand j'essaie de déclarer une map, ou même un iterator sur ce type de map, etc... ça me ramène des erreurs incompréhensibles (pour moi) et ça m'ouvre des fichiers comme stl_tree.h, stl_map.h...
voici la classe qui pose problème :
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 template<typename T> class State { public : State(const std::string& name_, const std::map< Transition<T>&, State<T>& > transitionList_, const T_type& type_=intermediaire); ~State(); const std::string& GetName() const; std::string& GetName(); void SetName(const std::string& name_); const Transition<T>& GetTransitionByName(const std::string& name_) const; Transition<T>& GetTransitionByName(const std::string& name_); void NewTransition(const Transition<T>& transition_, const State<T>& stateReached_); const T_type& GetType() const; T_type& GetType(); void SetType(const T_type& type_); private : std::string _name; std::map<Transition<T>& , State<T>& > _transitionsList; //<--c'est ce truc qui est dur à manipuler... T_type _type;
Parmi les méthodes que je 'arrive pas à utiliser dans mon main...
...voici le constructeur :
....NewTransition :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 template<typename T> State<T>::State(const std::string& name_, const std::map< Transition<T>& , State<T>& > transitionsList_, const T_type& type_ = intermediaire) : _name(name_), _transitionsList(transitionsList_), _type(type_) { //nothing to do }
..et enfin en voici mon utilisation (dans le main) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 template<typename T> void State<T>::NewTransition(const Transition<T>& transition_, const State<T>& stateReached_) { _transitionsList[transition_] = stateReached_; }
voici le message d'erreur (mais je penses que même sans vous allez vite voir que mon code cloche...)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 const Transition<std::string> str_transition("hello World", "transition 1"); std::map<Transition<std::string>&, State<std::string>& > str_map; State<std::string> state1("state1",str_map ); state1.NewTransition(str_transition, state1);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.0\include\c++\bits\stl_map.h|128|instantiated from 'std::map<Transition<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >&, State<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >&, std::less<Transition<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >&>, std::allocator<std::pair<Transition<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >&, State<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >&> > >'| C:\Program Files (x86)\CodeBlocks\Projets\FAST\main.cpp|10|instantiated from here| c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.0\include\c++\bits\stl_tree.h|1407|error: forming pointer to reference type 'Transition<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >&'| C:\Program Files (x86)\CodeBlocks\Projets\FAST\State.cpp||In member function 'void State<T>::NewTransition(const Transition<T>&, const State<T>&) [with T = std::basic_string<char, std::char_traits<char>, std::allocator<char> >]':| C:\Program Files (x86)\CodeBlocks\Projets\FAST\main.cpp|13|instantiated from here| C:\Program Files (x86)\CodeBlocks\Projets\FAST\State.cpp|88|error: no match for 'operator[]' in '((State<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >*)this)->State<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >::_transitionsList[transition_]'| c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.0\include\c++\bits\stl_map.h|442|note: candidates are: _Tp& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const _Key&) [with _Key = Transition<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >&, _Tp = State<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >&, _Compare = std::less<Transition<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >&>, _Alloc = std::allocator<std::pair<Transition<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >&, State<s| ||=== Build finished: 2 errors, 0 warnings ===|
Je penses que j'ai besoin d'une explication sur la manipulation des templates dans les maps...
Merci d'avance pour ceux qui auront le courage de m'aider.
Ps : j'aimerais bien rendre le paramètre listtransitions_ facultatif dans mon constructeur, mais je ne vois pas ce qu'on peut mettre comme valeur par défaut pour une map.. :/ ?
Partager