我有一个名为ProductionWorker TeamLeader,Employee的类
ProductionWorker扩展类Employee。
扩展ProductionWorker.的TeamLeader所述的构造函数如下:
TeamLeader :: TeamLeader(int trainingHoursCompleted, int shift, double hourlyPayRate) : ProductionWorker(shift, hourlyPayRate){
monthlyBonus = 1000;
requiredTrainingHours = 20;
this->trainingHoursCompleted = trainingHoursCompleted;
}错误读取如下:没有用于初始化“ProductionWorker”的匹配构造函数
...shift,double hourlyPayRate):ProductionWorker(shift,hourlyPayRate)。
ProductionWorker类中的构造函数如下:
ProductionWorker :: ProductionWorker() : Employee(){
shift = 0;
hourlyPayRate = 0;
}
ProductionWorker :: ProductionWorker(int shift, double hourlyPayRate, string employeeName, string hireDate, int employeeNumber) : Employee(employeeName, hireDate, employeeNumber) {
this->shift = shift;
this->hourlyPayRate = hourlyPayRate;
}如果我将“缺失”参数添加到TeamLeader构造函数中,如下所示
TeamLeader :: TeamLeader(int trainingHoursCompleted, int shift, double hourlyPayRate) : ProductionWorker(shift, hourlyPayRate, employeeName, hireDate, employeeNumber){
monthlyBonus = 1000;
requiredTrainingHours = 20;
this->trainingHoursCompleted = trainingHoursCompleted;}
I得到以下错误: TeamLeader.cpp:23:128: error:'employeeName‘是'Employee’的私有成员
对于TeamLeader无法访问的其他两个参数,也会发生此错误。
有人能告诉我怎么解决这个问题吗?因为如果感觉像是一个永无止境的圆圈..。
TeamLeader.cpp
#include <stdio.h>
#include <String>
#include "TeamLeader.h"
using namespace std;
TeamLeader :: TeamLeader() : ProductionWorker(){
monthlyBonus = 1000;
requiredTrainingHours = 20;
trainingHoursCompleted = 0;
}
TeamLeader :: TeamLeader(int trainingHoursCompleted, int shift, double hourlyPayRate) : ProductionWorker(shift, hourlyPayRate){
monthlyBonus = 1000;
requiredTrainingHours = 20;
this->trainingHoursCompleted = trainingHoursCompleted;
}
void TeamLeader :: setTrainingHoursCompleted(int trainingHoursCompleted){
this->trainingHoursCompleted = trainingHoursCompleted;
}ProductionWorker.cpp
#include "ProductionWorker.h"
ProductionWorker :: ProductionWorker() : Employee(){
shift = 0;
hourlyPayRate = 0;
}
ProductionWorker :: ProductionWorker(int shift, double hourlyPayRate, string employeeName, string hireDate, int employeeNumber) : Employee(employeeName, hireDate, employeeNumber) {
this->shift = shift;
this->hourlyPayRate = hourlyPayRate;
}
void ProductionWorker :: setShift(int shift){
this->shift = shift;
}
void ProductionWorker :: setHourlyPayRate(double hourlyPayRate){
this->hourlyPayRate = hourlyPayRate;
}Employee.cpp
Employee :: Employee(){
employeeName = "NO NAME ENTERED";
hireDate = "NO DATE ENTERED";
employeeNumber = 0;
}
Employee :: Employee(string employeeName, string hireDate, int employeeNumber){
this->employeeName = employeeName;
this->hireDate = hireDate;
this->employeeNumber = employeeNumber;
}
void Employee :: setEmployeeName(string employeeName){
this->employeeName = employeeName;
}
void Employee :: setHireDate(string hireDate){
this->hireDate = hireDate;
}
void Employee :: setEmployeeNumber(int employeeNumber){
this->employeeNumber = employeeNumber;
}发布于 2015-04-13 02:13:35
如果您希望团队负责人有一个名称等等,那么TeamLeader构造函数必须接受这个名称:
TeamLeader :: TeamLeader(int trainingHoursCompleted, int shift, double hourlyPayRate, string employeeName, string hireDate, int employeeNumber)
: ProductionWorker(shift, hourlyPayRate, employeeName, hireDate, employeeNumber)
, monthlyBonus(1000), requiredTrainingHours(20)
, trainingHoursCompleted(trainingHoursCompleted)
{ }注意:最好使用构造函数初始化程序列表,而不是类主体中的赋值语句。
如果您希望团队负责人没有名称(虽然我不知道您将如何在这种方法中设置名称)并让: ProductionWorker(shift, hourlyPayRate)工作,那么您需要向ProductionWorker添加一个构造函数,该构造函数包含两个参数,例如:
ProductionWorker :: ProductionWorker(int shift, double hourlyPayRate) :
shift(shift), hourlyPayRate(hourlyPayRate)
{ }注意:这个答案假设shift和hourlyPayRate是ProductionWorker的成员变量。
如果您使用的是C++11,那么您可以使用委托构造函数来避免重复多次。此外,查看默认参数。
https://stackoverflow.com/questions/29596524
复制相似问题