program_options - "недопустимое значение параметра", когда необходимо прочитать массив из файла
Я пытаюсь прочитать массив из файла конфигурации, но он показывает сообщение: "в опции" PARAM_ARRAY ": неверное значение опции".
Тема мне не помогает, потому что она читает массив из командной строки.
Код (только важные строки) выглядит примерно так:
typedef boost::numeric::ublas::bounded_vector<double,6> vec6;
po::options_description parameters("Options");
parameters.add_options()
("PARAM_ARRAY", po::value< vec6 >(&configParameters.PARAM_ARRAY), "parameters array comment")
;
тогда у меня есть эти строки тоже:
po::options_description config_file_options;
config_file_options.add(parameters);
// Parser the command line options
po::variables_map vm;
po::store(po::command_line_parser(ac, av).
options(cmdline_options).run(), vm);
po::notify(vm);
// Verify if a config file was passed as an option
if (vm.count("config")) {
const std::vector<std::string> &config_files = vm["config"].as< std::vector<std::string> >();
for(std::vector<std::string>::const_iterator it = config_files.begin();
it != config_files.end(); ++it) {
ifstream ifs(it->c_str());
if (!ifs)
{
cout << "can not open config file: " << *it << "\n";
exit(1);
}
// Parse the options on the config file.
// NOTE: They are not going to be updated if they were already set by the command line option
po::store(parse_config_file(ifs, config_file_options), vm);
po::notify(vm);
}
}
И наконец, мой конфигурационный файл (.yaml) имеет: PARAM_ARRAY= (0,0,0,0,0,0)
Я также попробовал: PARAM_ARRAY= {0,0,0,0,0,0} и многие другие форматы.
1 ответ
Я уже решил проблему. Это было немного раздражающим пробелом между каждым числом, "{}" должно быть "()", и я пропустил указание размера массива PARAM_ARRAY.
Я имел:
PARAM_ARRAY= {0, 0, 0, 0, 0, 0}
но файл конфигурации должен быть таким:
PARAM_ARRAY=[6](0,0,0,0,0,0)
В любом случае спасибо и надеюсь, что это поможет кому-то в будущем.