Boost logo

Boost :

Subject: [boost] [program_options] unknown positional option
From: Jeffrey Finkelstein (jeffrey.finkelstein_at_[hidden])
Date: 2010-08-04 11:03:30


Here is some code slightly modified from an example in the documentation for
boost::program_options.

<code>
#include <iostream>
#include <vector>
#include <string>
#include <boost/program_options/positional_options.hpp>
#include <boost/program_options/variables_map.hpp>
#include <boost/program_options/parsers.hpp>

namespace po = boost::program_options;

int main(int argc, char ** argv) {

  po::positional_options_description desc;
  desc.add("files", -1);
  std::cout << "Declared positional options." << std::endl;

  po::variables_map vm;
  po::store(po::command_line_parser(argc, argv).positional(desc).run(), vm);
  std::cout << "Stored command line arguments into vm." << std::endl;

  po::notify(vm);
  std::cout << "Notified vm that all args have been parsed" << std::endl;
  std::cout << " num files specified: " << vm.count("files") << std::endl;

  std::vector<std::string> files = vm["files"].as<std::vector<std::string>
>();
  for (unsigned int i = 0; i < files.size(); ++i) {
    std::cout << "file: " << files[i] << std::endl;
  }

  return 0;
}
</code>

Linking with version 1.40, the above code, when run with the command line
arguments "hello world", produces the following output:

<shell>
Declared positional options.
terminate called after throwing an instance of
'boost::exception_detail::clone_\
impl<boost::exception_detail::error_info_injector<boost::program_options::unkno\
wn_option> >'
  what(): unknown option files
Aborted
</shell>

Linking with version 1.43, the above code, when run with the command line
arguments "hello world", produces the following output:

<shell>
Declared positional options.
Segmentation fault
</shell>

Am I missing something about how to use positional arguments with this
library?

I am using Ubuntu 10.04 on x86. The 1.40 version of boost::program_options
was installed through the repositories, I compiled the 1.43 version
manually.

Jeffrey


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk