正規表現の一致から得た結果を unordered_map に保存しています。std::cout サブルーチンは m[1].str() および m[2].str() に一致し、キーと値のペアを正しく表示します。
それらをunordered_mapに保存すると、キーが見つからなかったという例外が常に発生します.これはコードです:
boost::unordered::unordered_map<std::string, std::string>
loadConfigFile(std::string pathToConfFile) throw(std::string){
std::fstream fs;
fs.open(pathToConfFile.c_str());
if(!fs)
throw std::string("Cannot read config file.");
boost::unordered::unordered_map<std::string, std::string> variables;
while(!fs.eof())
{
std::string line;
std::getline(fs, line);
//std::cout << line << std::endl;
boost::regex e("^(.+)\\s*=\\s*(.+)");
boost::smatch m; //This creates a boost::match_results
if(boost::regex_match(line, m, e)){
std::cout << m[1].str() << " " << m[2].str() << std::endl;
variables[m[1].str()] = m[2].str();
}
}
std::cout << variables.at(std::string("DEPOT_PATH")) << std::endl; //Here I get the exception
return variables;
}
DEPOT_PATH は、構成ファイル内の「変数」の名前です。std::cout << m[1].str() はそれを完全に示していますが、unordered_map には見つかりません。何か案は?