Нет подходящего конструктора по умолчанию? Ошибка C2512 - PullRequest
0 голосов
/ 03 мая 2020

Итак, я делаю проект, и я так близок к его завершению, но я застрял на этой ошибке более суток. Я не могу понять, как это исправить. Проект о создании системы начисления заработной платы с тремя различными типами сотрудников: стажеры, почасовые и наемные работники. Я создал объект 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...