При использовании Visual Studio я также получаю эту ошибку. Изучив setw
, который я связал с #include <iomanip>
, я обнаружил, что setw
снабжен параметром streamsize
, который на самом деле является long long
.
В результате возникает проблема, заключающаяся в том, что вы пытаемся привести арифметическое c результат двух int
(с размером 4 байта) к long long
(с размером 8 байтов), чтобы соответствовать определению streamsize
в setw
.
Переполнение, вызванное арифметической операцией c, не даст правильных результатов. Если вы хотите узнать, как возникает переполнение, вы можете взглянуть на следующую веб-статью https://www.cplusplus.com/articles/DE18T05o/.
Чтобы устранить проблему, вам необходимо предотвратить переполнение. происходящего, что может быть достигнуто путем приведения значений к большему типу данных. Например:
const long long value_cast = static_cast<long long>(*tPtr) - static_cast<long long>(*hPtr);
cout << setw(*hPtr) << 'H' << setw(value_cast) << 'A';
Я надеюсь, что это ответит на ваш вопрос. :)
Редактировать: Я изменил приведение с стиля c на stati c. Спасибо за ваш вклад anastaciu !