Boost.program_options 仅在向解析器添加位置选项后才会默默失败

问题描述 投票:0回答:0

我正在尝试使用 Boost.program_options,但位置参数不起作用。我是这方面的新手。

#include "Application.h"

#include <iostream>
#include <vector>
#include <fstream>
#include <istream>
#include <string>

#include <boost/program_options.hpp>

namespace po = boost::program_options;
using namespace std;


int Application::run(int ac, char *av[])
{
    po::options_description opts_desc("Allowed options");
    opts_desc.add_options()
            ("help,h", "produce help message")
            ;

    po::positional_options_description pos_opts_desc;
    pos_opts_desc.add("xyz", -1); // +1 doesnt work either


    po::variables_map vm {};
    cout << "Before store" << endl;
    po::store(po::command_line_parser(ac, av)
    .options(opts_desc)
    .positional(pos_opts_desc)
    .run(), vm);

    
    cout << "After store" << endl;

return 1;
}

这是一段非常简单的代码,什么都不做。但是,它不起作用,在调用 po::store,程序静默退出,“After store”消息没有打印出来。

我已经在 vscode 中设置了 gdb,可以看到失败发生在商店。

然而,没有错误信息,什么都没有。

我正在使用 boost 1.77 与 MinGW 的一些发行版打包在一起。

我不确定要提供更多详细信息。

当我注释掉 .positional 函数调用时,程序按预期完成。

我做错了什么?

boost boost-program-options
© www.soinside.com 2019 - 2024. All rights reserved.