Создал класс через Builder.
Из-за чего компилятор выдаёт предупреждения в файле Patient.cpp на определении двух конструкторов класса и как это пофиксить?
Выдаёт два таких предупреждения:
Warning C26495 Variable 'Patient::id' is uninitialized. Always initialize a member variable (type.6).
Код файла Patient.h:
#pragma once
#include <string>
class Patient
{
public:
Patient();
Patient(int id,std::string surname, std::string name, std::string patronymic, std::string address, std::string work_place, std::string last_date);
~Patient();
protected:
int id;//номер медицинской карты
std::string surname;//фамилия
std::string name;//имя
std::string patronymic;//отчество
std::string address;//адрес
std::string work_place;//место работы
std::string last_date;//дата последней флюрографии ???
};
Код файла Patient.cpp:
#include "Patient.h"
#include <iostream>
Patient::Patient()
{
std::cout << "Объект класса Patient создан\n";
}
Patient::Patient(int id, std::string surname, std::string name, std::string patronymic, std::string address, std::string work_place, std::string last_date)
{
this->id = id;
this->surname= surname;//фамилия
this->surname= name;//имя
this->patronymic= patronymic;//отчество
this->address= address;//адрес
this->work_place= work_place;//место работы
this->last_date= last_date;//дата последней флюрографии ???
std::cout << "Объект класса Patient с использованием формальныъх параметров создан.\n";
std::cout << "Объект класса Patient с использованием формальныъх параметров создан.\n";
}
Patient::~Patient()
{
std::cout << "Объект класса Patient удалён.\n";
}
Новая ошибка:
Error C2274 '->': illegal as right side of '.' operator Lab10
При попытке заменить -> на точку поддчеркивает this и выдаёт:
expression must have class type
В конструкторе Patient::Patient()
у вас поля инициализируются конструктором по-умолчанию, так что поле int id;
с тривиальным конструктором остается неинициализированным (то бишь заполнено мусором). Соответственно его необходимо инициализировать:
Patient::Patient(): m_id{}
{
std::cout << "Объект класса Patient создан\n";
}
Далее, в другом конструкторе все поля точно так же инициализируются конструктором по-умолчанию и только затем им присваиваются новые значения. Правильная инициализация выглядит так:
Patient::Patient(int id, std::string surname, std::string name, std::string patronymic, std::string address, std::string work_place, std::string last_date)
: m_id{id}
, m_surname{surname}
...
Ну и конечно имеет смысл использовать для полей такие имена, которые не приводят к конфликтам.
Компилятор ожидает от вас именно инициализации поля id
в конструкторе по умолчанию. Сгенерировать такую инициализацию вы можете либо явно написав список инициализации конструктора, либо неявно - указав инициализатор для id
в теле класса
class Patient
{
...
protected:
int id = 0;
...
};
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Использую r-tree из boost (geometry) для создания графической 2D сцены и возник такой вопрос: как сортировать объекты (box) по глубинеНа данный момент...
Хотите улучшить этот вопрос? Переформулируйте вопрос, чтобы он соответствовал тематике «Stack Overflow на русском»
У меня ubuntu и я случайно узнал что в ubuntu есть пакет mingw64 ( а потом и о проекте в сети )Я установил их