为什么使用[]运算符会导致编译器错误?

blz*_*blz 1 c++ boost boost-program-options

我写了这个快速功能来熟悉boost::program_options.请注意,这po是一个名称空间别名,定义如下: namespace po = boost::program_options.

int application(po::variables_map* vm)
{
    std::cout << vm << std::endl;
    std::cout << *vm["infile"].value();
    // also tried:  std::cout << *vm["infile"]

    return SUCCESS;
}  //application
Run Code Online (Sandbox Code Playgroud)

当我在函数体中注释掉第二行时,应用程序成功编译并打印了地址vm.但是,当我尝试使用此处出现的函数进行编译时,我得到以下编译器侮辱:

invalid types ‘boost::program_options::variables_map*[const char [7]]’ for array subscript
Run Code Online (Sandbox Code Playgroud)

我应该注意用std::cout << vm->count("infile")返回 替换第二行1.

我做错了什么?我是在滥用助推器构造还是在(de)引用中混淆了vm

更新

根据建议我通过引用传递以避免运算符优先级问题,我重写了我的函数:

int application(po::variables_map& vm)
{
    std::cout << &vm << std::endl;
    std::cout << vm["infile"].value();

    return SUCCESS;
}  //application
Run Code Online (Sandbox Code Playgroud)

我现在得到一个不同的错误:

no match for ‘operator<<’ (operand types are ‘std::ostream {aka std::basic_ostream<char>}’ and ‘const boost::program_options::variable_value’)
Run Code Online (Sandbox Code Playgroud)

我在这做错了什么?

编辑:我很高兴被告知为什么我的问题被低估了.太基础了吗?

Osw*_*ald 6

[]操作符比一元一个更高的优先级*运营商.因此,*vm["infile"]是相同的*(vm["infile"]),但你想要的(*vm)["infile"].