Опция программы Boost генерирует ошибку без причины
Я использую Boost 1.62.0 в Windows с Visual Studio 2013 и предварительно скомпилированными библиотеками.
У меня есть этот пример кода:
#include "boost/program_options.hpp"
#include "boost/filesystem.hpp"
#include <iostream>
namespace po = boost::program_options;
int main(int argc, char *argv[])
{
po::options_description desc("Allowed options");
for (int i = 0; i < argc; i++)
{
std::cout << i << "->" << argv[i] << std:: endl;
}
try
{
std::string outputPath;
boost::filesystem::path workingDir;
// get program options and check them that they are valid
{
desc.add_options()
("input-path,i", po::value< std::string >(), "input path")
("output_path,o", po::value< std::string >(&outputPath)->implicit_value(""), "output path.")
;
po::positional_options_description p;
p.add("input-path", -1);
po::variables_map vm;
po::store(po::command_line_parser(argc, argv).options(desc).positional(p).run(), vm);
po::notify(vm);
if (vm.count("input-path") == 0)
{
std::cout << "No input directory specified.\n";
return -1;
}
workingDir = vm["input-path"].as<std::string>();
}
}
catch (std::runtime_error &err)
{
std::cout << "Error: " << err.what() << std::endl;
}
catch (const boost::program_options::error &ex)
{
std::cerr << ex.what() << '\n';
}
}
И я запускаю его внутри VS с помощью этой командной строки:
"C:\Temp\test\in" -o "C:\Temp\test\out"
приложение распечатать это:
0->C:\MyData\TestCodes\testBoostProgramOption\build\Debug\test.exe
1->C:\Temp\test\in
2->-o
3->C:\Temp\test\in
что кажется правильным, но я получаю эту ошибку:
option '--input-path' cannot be specified more than once
Что не так с кодом или параметрами программы?