【发布时间】:2016-05-19 18:57:50
【问题描述】:
我正在努力让增强程序选项正常工作。我需要能够使用带有值的可选参数从终端窗口 (Linux) 启动我的程序。无论我做什么,这都行不通;无论我从终端输入什么值,它都只返回默认值。此外,如果我没有在终端命令中包含该选项,它会返回
terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injec tor<std::logic_error> >'
what(): character conversion failed
Aborted (core dumped)
所以我在网上找了一个小例子,看看是不是我做错了什么。这是我发现的示例,它执行了我需要的类似操作:
#include <iostream>
#include <boost/program_options.hpp>
namespace po = boost::program_options;
int main (int argc, char* argv[]) {
po::options_description desc("Usage");
desc.add_options()
("robots", po::value<int>()->default_value(3),
"How many robots do you want to send on a murderous rampage?");
po::variables_map opts;
po::store(po::parse_command_line(argc, argv, desc), opts);
try {
po::notify(opts);
}
catch (std::exception& e) {
std::cerr << "Error: " << e.what() << "\n";
return 1;
}
int nRobots = opts["robots"].as<int>();
// automatically assigns default when option not supplied by user!!
std::cout << nRobots << " robots have begun the silicon revolution"
<< std::endl;
return 0;
}
然而,这完全一样,我开始认为这要么是 Boost 中的错误(我猜不太可能),要么是我的系统不喜欢的东西?
有人可以提示一下可能出了什么问题吗?谢谢
【问题讨论】:
-
这对我来说是正确的。请确保您的可重现示例确实重现有问题的错误。
-
你的代码works here。
-
@nrussell 正如我在帖子中所说,该代码确实在我的机器上重现了该错误,并且怀疑这是我的 Boost (v1.60) 版本或我的系统上的某个错误。至少现在我知道代码确实有效,谢谢。
-
您使用的是哪个版本的 Boost,您使用什么命令编译程序?
-
@nrussell 使用 v1.60。它编译得很好,但我正在编译的命令是:g++ popt_test.cpp -lboost_program_options