Тема: Помилка в коді
Доброго вечора.
Маю помилку:
Помилка C2248 Person::GetNumber_I: неможливо звернутися до private члену, оголошеному в класі "Person" main
Знаю, що потрібно використовувати friend класи, але я не розумію як це організувати в цьому коді (код не мій, а взятий з лабораторної, яку просто потрібно запустити). Переписувати на своє неможна.
Постановка задачі:
Описати клас ЛІКАР на базі класу Person та реалізувати алгоритм методу розрахунку зарплатні в залежності від кількості хворих.
Код Doctor.cpp:
#include "Doctor.h"
#include <iostream>
using namespace std;
Doctor::Doctor() : Person()
{
this->countOfPatiens = 0;
}
Doctor::Doctor(string name, string surname, int year, int countOfPatiens) : Person(name, surname, year)
{
this->countOfPatiens = countOfPatiens;
}
Doctor::~Doctor()
{
}
void Doctor::setCountOfPatients(int countOfPatiens)
{
this->countOfPatiens = countOfPatiens;
}
int Doctor::getCountOfPatients()
{
return this->countOfPatiens;
}
void Doctor::input()
{
Person::input();
countOfPatiens = GetNumber_I(); // тут помилка
std::cout << "Enter count of patiens: ";
std::cin >> this->countOfPatiens;
}
void Doctor::output()
{
Person::output();
cout << "Count of patients: " << this->getCountOfPatients() << endl;
cout << "Salary: " << this->salary() << " dollars" << endl;
}
float Doctor::salary()
{
return this->getCountOfPatients() * PRICE;
}
Код Doctor.h:
#pragma once
#include "Person.h"
#define PRICE 50
class Doctor : public Person
{
private:
int countOfPatiens;
public:
Doctor();
Doctor(string, string, int, int);
~Doctor();
void setCountOfPatients(int);
int getCountOfPatients();
void input();
void output();
float salary();
};
Код Person.cpp:
#include "Person.h"
#include <iostream>
using namespace std;
Person::Person()
{
this->name = "";
this->surname = "";
this->year = 0;
}
Person::Person(string name, string surname, int year)
{
this->name = name;
this->surname = surname;
this->year = year;
}
Person::~Person()
{
}
void Person::setName(string name)
{
this->name = name;
}
void Person::setSurname(string surname)
{
this->surname = surname;
}
void Person::setYear(int year)
{
this->year = year;
}
string Person::getName()
{
return this->name;
}
string Person::getSurname()
{
return this->surname;
}
int Person::getYear()
{
return this->year;
}
void Person::input()
{
cout << "Enter name: ";
cin >> name;
cout << "Enter surname: ";
cin >> surname;
cout << "Enter year: ";
year = GetNumber_I();
}
void Person::output()
{
cout << "Name: " << this->getName() << endl;
cout << "Surname: " << this->getSurname() << endl;
cout << "Year: " << this->getYear() << endl;
}
Код Person.h:
#define MAX 50
#include <string>
#pragma once
using namespace std;
class Person
{
int GetNumber_I() // до цього тут було просто int GetNumber_I(); я додав return int(year), але не впевнений що це вірно
{
return int(year);
}
private:
std::string name;
std::string surname;
int year;
public:
Person();
Person(string, string, int);
~Person();
virtual void input();
virtual void output();
void setName(string);
void setSurname(string);
void setYear(int);
string getName();
string getSurname();
int getYear();
};
Код main.cpp:
#include "Doctor.h"
#include <iostream>
#include <conio.h>
using namespace std;
void menu();
int main()
{
Doctor* doctor = new Doctor();
char c;
do
{
system("cls");
menu();
do
{
c = _getch();
} while ((c <= '0' || c >= '4') && c != 27);
system("cls");
switch (c)
{
case '1':
doctor->input();
system("pause");
break;
case '2':
doctor->output();
system("pause");
break;
case '3':
cout << "Salary: " << doctor->salary() << endl;
system("pause");
break;
default:
break;
}
system("cls");
} while (c != 27);
return 0;
}
void menu() {
cout << "1) Input" << endl;
cout << "2) Outut" << endl;
cout << "3) Salary" << endl;
}