我写了这个快速函数来熟悉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
当我在函数体中注释掉第二行时,应用程序成功编译并打印vm
的地址。但是,当我尝试使用此处出现的函数进行编译时,我得到以下编译器侮辱:
invalid types ‘boost::program_options::variables_map*[const char [7]]’ for array subscript
我应该注意,用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
我现在得到一个不同的错误:
no match for ‘operator<<’ (operand types are ‘std::ostream {aka std::basic_ostream<char>}’ and ‘const boost::program_options::variable_value’)
我在这里做错了什么?
编辑:我很高兴被告知为什么我的问题被投票。这太基础了吗?
答案 0 :(得分:6)
[]
运算符的优先级高于一元*
运算符。因此,*vm["infile"]
与*(vm["infile"])
相同,但您需要(*vm)["infile"]
。