2011-02-15 5 views
1

je le code suivant:Comment puis-je créer un itérateur de conteneur avec le conteneur contenant un type de politique?

#include <map> 
#include <string> 

class policy1 
{ 
    public: 
    struct data 
    { 
    }; 
}; 

template<typename policy> 
class policy_user : public policy 
{ 
    typedef std::map<std::string, typename policy::data> mymap;  // good 
    typedef std::map<std::string, 
      typename policy::data >::iterator myiterator;    // bad 
    typedef mymap::iterator myseconditerator;      // also bad 
}; 

qui échoue avec:

der.cpp:17: error: type ‘std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, typename policy::data, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, typename policy::data> > >’ is not derived from type ‘policy_user<policy>’ 
der.cpp:17: error: expected ‘;’ before ‘myiterator’ 
der.cpp:18: error: type ‘std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, typename policy::data, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, typename policy::data> > >’ is not derived from type ‘policy_user<policy>’ 
der.cpp:18: error: expected ‘;’ before ‘myseconditerator’ 

Et je n'ai pas la moindre idée pourquoi. Toute aide comment je peux accomplir ce que j'essaye de faire (créer un itérateur)?

Répondre

7

Vous avez oublié typename dans typedefs.

Ecrire:

typedef typename std::map<std::string, typename policy::data >::iterator myiterator;  
typedef typename mymap::iterator myseconditerator; 

maintenant. C'est bien. typename est requis car iterator est un dependent name. Voir aussi this

Questions connexes