gpt4 book ai didi

c++ - 我无法在不违反 C++ 扩展规则的情况下创建匹配的构造函数

转载 作者:行者123 更新时间:2023-11-28 06:19:14 25 4
gpt4 key购买 nike

我有一个名为 TeamLeaderProductionWorkerEmployee 的类

ProductionWorker 扩展类 Employee

TeamLeader 扩展 ProductionWorker。有问题的构造函数如下:

TeamLeader :: TeamLeader(int trainingHoursCompleted, int shift, double hourlyPayRate) : ProductionWorker(shift, hourlyPayRate){
monthlyBonus = 1000;
requiredTrainingHours = 20;
this->trainingHoursCompleted = trainingHoursCompleted;
}

错误如下:没有匹配的构造函数来初始化 '生产 worker '

...类次,双小时工资率):ProductionWorker(类次,小时工资率)

我在 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;

我收到以下错误: TeamLeader.cpp:23:128: error: 'employeeName' is a private member of '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;
}

员工.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;
}

最佳答案

如果您希望 Team Leaders 有一个名字等,那么 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)
{ }

注意。此答案假定 shifthourlyPayRateProductionWorker 的成员变量。

如果您使用的是 C++11,则可以使用委派构造函数 来避免重复自己的话。另外,查看默认参数。

关于c++ - 我无法在不违反 C++ 扩展规则的情况下创建匹配的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29596524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com