Ich bin auf Ubuntu 14.04, mit CMake und CLion. Ich versuche, von einem Beispiel in ihrer Dokumentation genommen Programmoptionen, mit dem folgenden Code zu verwenden:Boost Program_Options wirft "Zeichenumwandlung fehlgeschlagen"
#include <iostream>
#include <boost/program_options.hpp>
int main(int ac, char* av[]) {
namespace po = boost::program_options;
using namespace std;
po::options_description desc("Allowed options");
desc.add_options()
("help", "produce help message")
("compression", po::value<int>(), "set compression level")
;
po::variables_map vm;
po::store(po::parse_command_line(ac, av, desc), vm);
po::notify(vm);
if (vm.count("help")) {
cout << desc << "\n";
return 1;
}
if (vm.count("compression")) {
cout << "Compression level was set to "
<< vm["compression"].as<int>() << ".\n";
} else {
cout << "Compression level was not set.\n";
}
}
Wenn ich es laufen, bekomme ich die folgende Ausgabe aus der Klemme:
$ ./bin/webserver --help
terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<std::logic_error> >'
what(): character conversion failed
Aborted (core dumped)
Warum ist das funktioniert nicht und wie kann ich es lösen?
EDIT: Nach einigen Debugging, habe ich festgestellt, dass das Problem von der Linie mit store
kommt, wenn dies für Sie eine Hilfe ist. Auch muß ich erwähne ich versuchte store(..., true)
mit
Kein Fehler für mich mit g ++ 4.9.2 und Boost 1.55. – rhashimoto
Ich verwende Boost 1.60.0 – Victor