Почему это использование оператора [] вызывает ошибку компилятора?

Я написал эту быструю функцию, чтобы познакомиться с 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,

Что я сделал не так? Злоупотребляю ли я бустовой конструкцией или я замешан в (де) ссылках 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’)

Что я здесь не так сделал?

Редактировать: Я был бы признателен, если бы мне сказали, почему мой вопрос опровергают. Это слишком просто?

1

Решение

[] оператор имеет более высокий приоритет, чем унарный * оператор. Таким образом, *vm["infile"] такой же как *(vm["infile"]), но ты хочешь (*vm)["infile"],

6

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector