我有两节课;Salary
它旨在保存有关员工薪水的信息和计算,并且Employee
具有类型对象class Salary
和一些成员,例如员工的姓名和地址...
我想要做的是防止
class Salary
被实例化,除了class Employee
. 所以我声明了Salary
private 的构造函数并结交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?