У меня есть два класса; Salary
, предназначенный для хранения информации и расчетов по заработной плате сотрудника, и Employee
с объектом типа class Salary
и некоторыми членами, такими как имя и адрес сотрудника ...
Я хочу предотвратить создание экземпляра class Salary
, за исключением class Employee
. Поэтому я объявил конструкторы Salary
закрытыми и сделал Employee
другом Salary
. Но я получаю ошибки:
class Employee;
class Salary {
public:
private:
Salary() : revenue_{}, cost_{} {}
Salary(int x, int y) : revenue_{ x },
cost_{ y } {
}
int revenue_, cost_;
friend class Employee;
};
class Employee {
public:
std::string name_;
Salary sal;
};
int main(){
Employee emp{}; // "Salary::Salary()" is inaccessible
}
Проблема исчезнет, если я перейду объявить main
:
int main(int, char*[]);
И сделайте main
другом class Salary
, например, в Зарплате:
class Salary {
//...
friend int main(int argc, char* argv[]);
};
Теперь программа правильно компилируется!
*** Другое дело, если я объявлю объект таким образом:
Employee emp; // ok
Employee emp{}; // error?