TransWikia.com

Ошибка max в C++

Stack Overflow на русском Asked by Pcoder on August 30, 2021

Недавно наткнулся на проблему в c++. Есть переменная int mx и есть сет set vals, надо переменной mx передать значение max(mx, vals.size()), но max ломается. Подскажите как засолвить проблему пожалуйста.

int mx = 0;
set <int> vals;
mx = max(vals.size(), mx);

2 Answers

Надо перевести mx в тип std::size_t либо изначально его таким создать.

std::max(vals.size(), static_cast<std::size_t>(mx));

Answered by user398400 on August 30, 2021

Дело в том, что max - это шаблон функции. Давайте посмотрим на обьявление этого шаблона:

template< class T >
constexpr const T& max( const T& a, const T& b );

Как видно, два аргумента имеют одинаковый тип. Теперь посмотрим на Ваш вызов max:

max(vals.size(), mx);

Так в чём проблема? Проблема в том, что vals.size() возвращает значение, которое имеет тип size_t. А mx имеет тип int. Получается, что типы разные и компилятор не может определить нужный тип. Поэтому нужно явно указать какой тип использовать. Для этого просто укажите необходимый тип в угловых скобках после имени функции. Вот так:

max<int>(vals.size(), mx);

Answered by EOF on August 30, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP