ошибка C2397: преобразование из int в unsigned int требует сужающего преобразования - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть std::array<unsigned, 3>, определенный внутри класса. Я хочу инициализировать его внутри конструктора, например:

MyClass::MyClass(std::map<std::string, std::string> const&data)
{
MyArr[0] = (unsigned)(std::atoi(data["one"].c_str()));
MyArr[1] = (unsigned)(std::atoi(data["two"].c_str()));
MyArr[2] = (unsigned)(std::atoi(data["three"].c_str()));
}

Скомпилировав этот код в последнем выпуске MSV C с

cl /EHsc /O2 /std:c++17 main.cpp

I получить

error C2397: conversion from 'int' to 'unsigned int' requires a narrowing conversion

он указывает на строку 2, если фрагмент.

1 Ответ

0 голосов
/ 13 апреля 2020

Используйте соответствующую функцию для преобразования строки в целое число без знака:

char* end;
MyArr[0] = std::strtoul(data["one"].c_str(), &end, 10);

Вам также может потребоваться определить массив как std::array<unsigned long, 3>.

...