Итак, я делаю проект, и я так близок к его завершению, но я застрял на этой ошибке более суток. Я не могу понять, как это исправить. Проект о создании системы начисления заработной платы с тремя различными типами сотрудников: стажеры, почасовые и наемные работники. Я создал объект Person. Существует заголовочный файл для каждого типа сотрудников, например Intern.h, HourlyEmp.h и CommissionEmp.h и файл. cpp вместе с ними. Но каждый раз, когда я запускаю программу, я сталкиваюсь с ошибкой в каждом из файлов сотрудника C ++: «Person.h» нет подходящего конструктора по умолчанию.
вот код Person.h
#pragma once
#include <string>
#ifndef PERSON_H
#define PERSON_H
using namespace std;
class Person
{
private:
int m_id;
string m_lastName;
double m_hoursWorked;
public:
Person(int id, string lastName, double hoursWorked); //I believe the issue exists here
//accessors
int GetId() const { return m_id; };
string GetLastName() const { return m_lastName; };
double GetHoursWorked() const { return m_hoursWorked; };
//mutators
void SetId(int id) { m_id = id; }
void SetLastName(string lastName) { m_lastName = lastName; }
void SetHoursWorked(double hoursWorked) { m_hoursWorked = hoursWorked; }
virtual double ComputeWeeklySalary();
};
#endif
Вот Персона. cpp
#include "Person.h"
#include <string>
Person::Person(const int id, const string lastName, const double hoursWorked) : m_id(id),
m_lastName(lastName),
m_hoursWorked(hoursWorked)
{
m_hoursWorked = hoursWorked;
m_id = id;
m_lastName = lastName;
}
double Person::ComputeWeeklySalary()
{
return 0.0;
}
Вот HourlyEmp. cpp (здесь появляется ошибка, как и у других сотрудников. cpp файлы в том же месте )
#include <string>
#include <iostream>
#include "Person.h"
#include "HourlyEmp.h"
using namespace std;
HourlyEmp::HourlyEmp(int id, string lastName, double hoursWorked, double hourlyRate) : m_hourlyRate(hourlyRate)
{ //this line right here is triggering the error
}
double HourlyEmp::ComputeWeeklySalary(double m_hourlyRate, double m_hoursWorked)
{
double hoursWorked = GetHoursWorked();
return m_hourlyRate * hoursWorked;
}
Очевидно, что кода гораздо больше, но я не хочу засорять этот пост блоками кода. Я считаю, что проблема существует в этих файлах, которые у меня есть здесь. Я попытался назначить параметры в конструкторе Person равными 0 или пустой строке для lastName, но это мне не помогло, потому что при этом все идентификаторы сотрудников и фамилии сбрасываются на 0 или не отображаются. Я также пытался объявить конструктор по умолчанию как Person (), но он также не помог
Редактировать: вот пример кода моего основного класса, в котором создается Person
int main()
{
vector<Person*> employeeList;
Person* emp = new Intern(52, "Smith");
employeeList.push_back(emp);
emp = new HourlyEmp(77, "Jones", 40.0, 25.0); // Hours worked, and hourly rate
employeeList.push_back(emp);
emp = new CommissionEmp(44, "Hughs", .10, 20000.00); // Commission rate, and total sales
employeeList.push_back(emp);
emp = new HourlyEmp(39, "Wilson", 30.0, 10.0); // Hours worked, and hourly rate
employeeList.push_back(emp);