下面的C++代码为什么子命令的参数没有被识别:#include omph#include boostprogram_optionshpp#include computeSubnetworkTopologyh#include mich#include iostream#include stringnamespace po = boostprogram_options; 结构体struct MainO
在上述代码中,子命令的参数没有被识别的原因是因为在解析命令行参数时,没有将子命令的选项描述添加到总的选项描述中。因此,在解析命令行参数时,子命令的选项描述没有被包含在内,导致子命令的参数无法被识别。
要解决这个问题,需要将子命令的选项描述添加到总的选项描述中。具体来说,需要在parseMicOptions和parseSubntwkOptions函数中,将子命令的选项描述desc添加到总的选项描述allOptions中,如下所示:
void parseMicOptions(int argc, char* argv[], MicOptions& options) {
po::options_description desc("Options for 'mic' command");
desc.add_options()
("help,h", "help message")
("input", po::value<std::string>(&options.input)->required(), "input file")
("output", po::value<std::string>(&options.output)->required(), "output file")
("threads", po::value<int>(&options.threads)->default_value(1), "number of threads");
// 合并选项描述
po::options_description allOptions;
allOptions.add(desc); // 添加子命令的选项描述
// Parse command-line arguments
po::variables_map vm;
po::store(po::command_line_parser(argc, argv).options(allOptions).run(), vm);
po::notify(vm);
if (vm.count("help")) {
options.help = vm["help"].as<std::string>();
}
if (vm.count("input")) {
options.input = vm["input"].as<std::string>();
}
if (vm.count("output")) {
options.output = vm["output"].as<std::string>();
}
if (vm.count("threads")) {
options.threads = vm["threads"].as<int>();
}
}
void parseSubntwkOptions(int argc, char* argv[], SubntwkOptions& options) {
po::options_description desc("Options for 'subntwk' command");
desc.add_options()
("help,h", "help message")
("adjacent", po::value<std::string>(&options.adjacent)->required(), "adjacent file")
("abundance", po::value<std::string>(&options.abundance)->required(), "abundance file")
("output", po::value<std::string>(&options.output)->required(), "output file");
// 合并选项描述
po::options_description allOptions;
allOptions.add(desc); // 添加子命令的选项描述
// Parse command-line arguments
po::variables_map vm;
po::store(po::command_line_parser(argc, argv).options(allOptions).run(), vm);
po::notify(vm);
if (vm.count("help")) {
options.help = vm["help"].as<std::string>();
}
if (vm.count("adjacent")) {
options.adjacent = vm["adjacent"].as<std::string>();
}
if (vm.count("abundance")) {
options.abundance = vm["abundance"].as<std::string>();
}
if (vm.count("output")) {
options.output = vm["output"].as<std::string>();
}
}
通过将子命令的选项描述添加到总的选项描述中,子命令的参数就能够被正确识别和解析。
原文地址: https://www.cveoy.top/t/topic/ivXe 著作权归作者所有。请勿转载和采集!