У меня есть два класса; 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?