РЕДАКТИРОВАТЬ :
вторым параметром po::positional_options_description::add
является max count , а не позиция.Позиция подразумевается в том порядке, в котором вы указываете позиционные параметры.Так что
p.add("motif_size", 0).add("prob", 1).add("filename", 2).add("repeats", 3);
должно быть
p.add("motif_size", 1).add("prob", 1).add("filename", 1).add("repeats", 1);
Вот скомпилированный фрагмент
include <boost/program_options.hpp>
#include <iostream>
#include <string>
int
main(unsigned argc, char** argv)
{
namespace po = boost::program_options;
po::options_description common("Common options");
common.add_options()
("help", "produce help message")
("motif_size", po::value<int>(), "Size of motif (subgraph)")
("prob", po::value<double>(), "Probably to continue examining an edge")
("filename", po::value<std::string>(), "Filename of the input graph")
("repeats", po::value<int>(), "Number of estimates")
;
po::options_description all;
all.add(common);
po::positional_options_description p;
p.add("motif_size", 1).add("prob", 1).add("filename", 1).add("repeats", 1);
po::variables_map vm;
try {
po::store(po::command_line_parser(argc, argv).
options(all).positional(p).run(), vm);
po::notify(vm);
} catch ( const boost::program_options::error& e ) {
std::cerr << e.what() << std::endl;
}
return 0;
}
и пример вызова.
macmini:~ samm$ g++ parse.cc -lboost_program_options
macmini:~ samm$ ./a.out 3 1 test.txt 100
macmini:~ samm$
Мой оригинальный ответниже.
Какая версия program_options?У меня была та же проблема с использованием Boost 1.39, чтобы решить ее, я в итоге использовал Boost 1.42.
Вот ссылка на ticket , описывающая проблему, и патч, который нужно применить, если вы неЯ не хочу или не могу обновить вашу копию Boost.Чтобы использовать новую функциональность, сделайте что-то вроде этого
try {
// argument parsing goes here
} catch ( const boost::program_options::multiple_occurrences& e ) {
std::cerr << e.what() << " from option: " << e.get_option_name() << std::endl;
}