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:
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:
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:
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:
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:
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.. :/ ?