我在Ubuntu 14.04上使用CMake和CLion。我试图使用程序选项,从一个实例在其文档中采取了以下代码:Boost Program_Options抛出“字符转换失败”
#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";
}
}
当我运行它,我从终端输出如下:
$ ./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)
为什么不工作,我该如何解决它?
编辑:经过一些调试后,我发现问题来自store
行,如果这对你有任何帮助。此外,我不得不提到我尝试使用store(..., true)
(设置unicode
到true
)
对于使用g ++ 4.9.2和Boost 1.55的我来说没有错误。 – rhashimoto
我正在使用Boost 1.60.0 – Victor