我的基类位于Employee.h中,这是构造函数的代码. Employee(string Fname = "First Name not Set.", string Lname = "Last Name not Set."); 这是Employee.cpp的代码 Employee :: Employee(string Fname = "First Name not Set.", string
Employee(string Fname = "First Name not Set.", string Lname = "Last Name not Set.");
这是Employee.cpp的代码
Employee :: Employee(string Fname = "First Name not Set.", string Lname = "Last Name not Set.") : FirstName(Fname), LastName(Lname) { }
问题是我的构造函数,它说它们的参数是错误的,但我不确定它们有什么问题.
Manager.h
class Manager: public Employee public: Manager(string Fname = "First Name not Set.", string Lname = "Last Name not Set.", double sal = 0.0, string BTitle = "Boss's Title not Set."): Employee (Fname,Lname){}
Manager.cpp
Manager :: Manager(string Fname = "First Name not Set.", string Lname = "Last Name not Set.", double sal = 0.0, string BTitle = "Boss's Title not Set."): Employee(Fname, Lname) { FirstName = Fname; LastName = Lname; salary = sal; TitleOfBoss = BTitle; }
这是我收到的错误消息:
'Manager::Manager' : redefinition of default parameter : parameter 4: : see declaration of 'Manager::Manager' 'Manager::Manager' : redefinition of default parameter : parameter 3: : see declaration of 'Manager::Manager' 'Manager::Manager' : redefinition of default parameter : parameter 2: : see declaration of 'Manager::Manager' 'Manager::Manager' : redefinition of default parameter : parameter 1: : see declaration of 'Manager::Manager'
与Employee构造函数相同.
error C2572: 'Employee::Employee' : redefinition of default parameter : parameter 2: see declaration of 'Employee::Employee' error C2572: 'Employee::Employee' : redefinition of default parameter : parameter 1: see declaration of 'Employee::Employee'就像错误消息告诉您的那样,您已经多次定义了默认参数.在两种情况下,默认值都相同并不重要;它仍然是非法的. The help page for that compiler error很清楚.
默认参数应该在类中的头文件中,声明构造函数,或者它们应该在构造函数的实现中,但不能同时在两者中.
我建议你将它们留在标题中,因为默认参数值是公共接口的一部分.然后构造函数定义变为:
Manager::Manager( /* default values provided in header */ string Fname /* = "First Name not Set." */, string Lname /* = "Last Name not Set." */, double sal /* = 0.0 */, string BTitle /* = "Boss's Title not Set." */) : Employee(Fname, Lname) , salary(sal), TitleOfBoss(BTitle) { }
编译器将忽略注释,它们只是提醒您声明提供默认参数.
我还修复了你的构造函数,使用初始化列表初始化子对象.这不是Java,在构造函数体中包含任何代码是非常罕见的.