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