【问题标题】:How to fix "no matching fuction for call to:" error in c++如何修复 C++ 中的“没有匹配的调用函数:”错误
【发布时间】:2019-10-09 08:30:24
【问题描述】:

我正在为工资报表编写一个程序,但当我执行此操作时,我遇到了这个奇怪的错误 纯病毒式继承。

我已经检查了我是否在基类或其他任何地方犯了错误,但我找不到。

基类:

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)C++(没办法)。 2)德语(可整改)——编程的国际语言是英语;不管你喜不喜欢,这是一个事实。不要使用非英语名称让每个人都变得更难。

标签: c++ eclipse inheritance constructor


【解决方案1】:

您应该调用基类构造函数,而不是尝试在派生类中初始化基类字段(这是不允许的):

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

mitarbeiter 也应该作为const & 传递

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-18
    • 2019-02-10
    • 2019-12-15
    相关资源
    最近更新 更多