それが私の最初の質問です:)
プログラムの構成をGroup->Key->Value
古いINIのような形式で保存しています。情報を一対の構造に保存しています。
最初std::map
に、グループ情報(文字列キーのグループ名)にwith string+ptrを使用しています。2番目の値は、フィニッシュペアを持つsのstd::map
sencond構造体へのポインターです。std::list
std::map
Key->Value
キー->値のペア構造は動的に作成されるため、構成構造は次のようになります。
std::map< std::string , std::list< std::map<std::string,std::string> >* > lv1;
さて、私は内部構成のデータの存在をチェックするために2つのメソッドを実装しようとしています。1つ目は、構造内のグループの存在を確認します。
bool isConfigLv1(std::string);
bool ConfigManager::isConfigLv1(std::string s) {
return !(lv1.find(s)==lv1.end());
}
2番目の方法は、私を夢中にさせることです...グループ内のキーの存在をチェックします。
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;
}
何が悪いのかわかりません。コンパイラは言う:
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’|
ただし、マップイテレータであるため、2番目のメンバーが必要です...
何が起こっているのかについて何か提案はありますか?
私の英語:Pについて申し訳ありませんが、これを演習として行っていると考えてください。クールな構成マネージャーがたくさんいることを知っています。