Вызов конструктора из другого конструктора оставляет элементы данных неинициализированными [дубликат]C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Вызов конструктора из другого конструктора оставляет элементы данных неинициализированными [дубликат]

Сообщение Anonymous »

Я писал функцию для чтения температуры в определенные часы из файла csv и сохраняла ее внутри объектов Reading. Я хотел перегрузить конструктор так, чтобы объект Reading можно было инициализировать с помощью прямых аргументов и вектора, содержащего два аргумента: час и температуру. Причина, по которой я использовал вектор вместо чего-то вроде пары, заключалась в том, что было удобнее добавлять к вектору час и температуру при анализе каждого столбца в файле csv.
Две проверки на достоверность час и температура выполняются при построении объекта Reading. Поскольку эти проверки выполняются независимо от того, какой перегруженный конструктор вызывается, я подумал, что вызов «инициализирующего конструктора» из другого конструктора может быть плавным решением. После быстрого прочтения этого ответа я решил, что он будет работать так, как я себе представлял (это не так).
Вот наименьший воспроизводимый код проблемы, с которой я столкнулся:

Код: Выделить всё

bool valid_hour_temp(const int hour, const int temp)
{
if (hour < 0 || hour > 23) return false;
if (temp < -273.15) return false;
return true;
}

struct Reading
{
Reading(int read_hour, int read_temp)
{
if (!valid_hour_temp(read_hour, read_temp)) throw std::invalid_argument("Bad data");
hour = read_hour;
temperature = read_temp;
std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/78540309/calling-constructor-from-another-constructor-leaves-data-members-un-initialized[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»