c++ - Why is this use of the [] operator causing a compiler error? -
i wrote quick function familiar boost::program_options. please note po namespace alias, defined thus: namespace po = boost::program_options.
int application(po::variables_map* vm) { std::cout << vm << std::endl; std::cout << *vm["infile"].value(); // tried: std::cout << *vm["infile"] return success; } //application when comment out second line in function body, application compiles , prints address of vm. however, when try compile function appearing here, following compiler insult:
invalid types ‘boost::program_options::variables_map*[const char [7]]’ array subscript i should note replacing second line std::cout << vm->count("infile") returns 1.
what have done wrong? abusing boost construct or getting mixed in (de)referencing vm?
update
following suggestion pass reference avoid operator precedence issue, rewrote function thus:
int application(po::variables_map& vm) { std::cout << &vm << std::endl; std::cout << vm["infile"].value(); return success; } //application i'm getting different error:
no match ‘operator<<’ (operand types ‘std::ostream {aka std::basic_ostream<char>}’ , ‘const boost::program_options::variable_value’) what have done wrong here?
edit: i'd appreciate being told why question being downvoted. basic?
the [] operator has higher precedence unary * operator. thus, *vm["infile"] same *(vm["infile"]), want (*vm)["infile"].
Comments
Post a Comment