1

Тема: Помилка в коді

Доброго вечора.
Маю помилку:
Помилка 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;
}

2

Re: Помилка в коді

Члени класу, проголошені без специфікатора доступу, є private. Перенесіть метод у розділ public, якщо вам треба, щоб до нього був доступ з-поза класу.

Подякували: kerimov_e1

3

Re: Помилка в коді

Дякую! Тепер все працює!