Как исправить ошибку «нет соответствия для вызова:» в C ++ - PullRequest
0 голосов
/ 22 мая 2019

Я пишу программу для отчетов о зарплате, и я получаю эту странную ошибку, когда я наследовать чисто вирусно.

Я уже проверил, допустил ли я какую-то ошибку в базовом классе или где-либо еще, но не могу ее найти.

Базовый класс:

class abrechnung {
public:
    abrechnung(int periode, mitarbeiter& mitarbeiter);
    virtual ~abrechnung();
    int getPeriode();
    mitarbeiter getMitarbeiter();
    virtual double getVerdienst()=0;
    std::string toString();
private:
    int periode;
    mitarbeiter arbeiter;
};

Производный класс:

class gehaltsAbrechnung: public abrechnung {
public:
    gehaltsAbrechnung(int periode, mitarbeiter arbeiter, double gehalt);
    virtual ~gehaltsAbrechnung();
    double getVerdienst();
private:
    double gehalt;
};

gehaltsAbrechnung::gehaltsAbrechnung(int periode, mitarbeiter arbeiter,                                     
double gehalt): periode(periode), arbeiter(arbeiter), gehalt(gehalt) {}

Неожиданные сообщения об ошибках:

no matching function for call to 'abrechnung::abrechnung()'
class 'gehaltsAbrechnung' does not have any field named 'periode'
class 'gehaltsAbrechnung' does not have any field named 'arbeiter'

Что я сделал не так и как я могу это исправить?

1 Ответ

1 голос
/ 22 мая 2019

Вы должны вызывать конструктор базового класса вместо попытки инициализации полей базового класса в производном классе (что недопустимо):

gehaltsAbrechnung::gehaltsAbrechnung(int periode, mitarbeiter arbeiter,
    double gehalt): abrechnung(periode, arbeiter), gehalt(gehalt) {}

также mitarbeiter, вероятно, следует передать как const &

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...