C'est ma première question :)Impossible d'accéder à un membre de la carte d'un pointeur
Je stocker la configuration de mon programme sous une forme Group->Key->Value
, comme l'ancien INI. Je stocke l'information dans une paire de structures.
D'abord, j'utilise un std::map
avec string + ptr pour les informations sur les groupes (le nom du groupe dans la clé de chaîne). La deuxième valeur std::map
est un pointeur vers la structure sencond, un std::list
de std::map
s, avec la finition Key->Value
paires.
La structure paires key-> de la valeur est créée dynamiquement, de sorte que la structure de configuration est:
std::map< std::string , std::list< std::map<std::string,std::string> >* > lv1;
Eh bien, je suis en train de mettre en œuvre deux méthodes pour vérifier l'existence de données dans la configuration interne. Le premier, vérifier l'existence d'un groupe dans la structure:
bool isConfigLv1(std::string);
bool ConfigManager::isConfigLv1(std::string s) {
return !(lv1.find(s)==lv1.end());
}
La deuxième méthode, me rend fou ... Il vérifier l'existence d'une clé à l'intérieur d'un groupe.
bool isConfigLv2(std::string,std::string);
bool ConfigManager::isConfigLv2(std::string s,std::string d) {
if(!isConfigLv1(s))
return false;
std::map< std::string , std::list< std::map<std::string,std::string> >* >::iterator it;
std::list< std::map<std::string,std::string> >* keyValue;
std::list< std::map<std::string,std::string> >::iterator keyValueIt;
it = lv1.find(s);
keyValue = (*it).second;
for (keyValueIt = keyValue->begin() ; keyValueIt != keyValue->end() ; keyValueIt++)
if(!((*keyValueIt).second.find(d)==(*keyValueIt).second.end()))
return true;
return false;
}
Je ne comprends pas ce qui est faux. Le compilateur dit:
ConfigManager.cpp||In member function ‘bool ConfigManager::isConfigLv2(std::string, std::string)’:|
ConfigManager.cpp|(line over return true)|error: ‘class std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, 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> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >’ has no member named ‘second’|
Mais il doit avoir le deuxième membre, parce qu'il est un iterator carte ...
Toute suggestion au sujet de ce qui se passe?
Désolé pour mon anglais: P, et considérez que je le fais comme un exercice, je sais qu'il y a beaucoup de gestionnaires de configuration cool.
Si un morceau de code a déjà été sélectionné Les instructions 'typedef', c'est tout. – Pillsy
N'oubliez pas de voter sur les réponses utiles;) * (Je ne sous-entends pas que vous devez voter une certaine réponse, mais que le vote est l'une des principales caractéristiques de SO - voir la FAQ pour plus de détails.) * –