构造函数给出错误:没有匹配的函数来调用

时间:2020-02-27 15:46:14

标签: c++

我不知道如何修复此构造函数。它不断返回错误:“没有匹配的函数来调用'JMTDSavingsAccount :: JMTDSavingsAccount()'”这很奇怪,因为错误在子类(子类:JMTDCheckingAccount,父类:JMTDSavingsAccount)的构造函数上。构造函数不是不会传递给子类吗?

子类的标题:

#define JMTDCHECKINGACCOUNT_H
#include <iostream>
#include <iomanip>
#include <string>
#include <sstream>
#include "JMTDSavingsAccount.h"


class JMTDCheckingAccount : public JMTDSavingsAccount {
private:
    double transaction_fee();

public:
    JMTDCheckingAccount(double balance, std::string account_number, double transaction_fee);
    void set_transaction_fee(double fee);
    double get_transaction_fee();

    virtual void deposit(double amount);
    virtual void withdraw(double amount);
    std::string a_to_string();
};


#endif

子类的源文件:(仅涉及我们正在处理的部分)

#include "JMTDCheckingAccount.h"
#include "JMTDSavingsAccount.h"
#include <iostream>
#include <iomanip>
#include <string>
#include <sstream>


using namespace std;

JMTDCheckingAccount::JMTDCheckingAccount(double b, string a_n, double t_f){
    set_account_number(a_n);
    set_transaction_fee(t_f);
    set_balance(b);
}

这是父母的头文件:

#ifndef JMTDSAVINGSACCOUNT_H
#define JMTDSAVINGSACCOUNT_H
#include <iostream>
#include <iomanip>
#include <string>
#include <sstream>


class JMTDSavingsAccount {
private:
    std::string account_number;
    double balance;

public:
    JMTDSavingsAccount(double balance, std::string account_number);
    void set_balance(double b);
    int get_balance() const;
    void set_account_number(std::string a_n);
    std::string get_account_number() const;
    virtual void deposit(double amount);
    virtual void withdraw(double amount);
    virtual std::string a_to_string();
};


#endif

最后是父源文件:

#include <iostream>
#include <iomanip>
#include <string>
#include <sstream>
#include "JMTDSavingsAccount.h"

using namespace std;

JMTDSavingsAccount::JMTDSavingsAccount(double b, string a_n){
    set_balance(b);
    set_account_number(a_n);
}

void JMTDSavingsAccount::set_balance(double b){
    balance = b;
}

int JMTDSavingsAccount::get_balance() const{
    return balance;
}

void JMTDSavingsAccount::set_account_number(string a_n){
    account_number = a_n;
}

string JMTDSavingsAccount::get_account_number() const{
    return account_number;
}

void JMTDSavingsAccount::deposit(double amount){
    set_balance(balance + amount);
}

void JMTDSavingsAccount::withdraw(double amount){
    set_balance(balance - amount);
}

string JMTDSavingsAccount::a_to_string(){

}

1 个答案:

答案 0 :(得分:4)

如果不显式调用基类的构造函数,则将调用默认的构造函数。但是JMTDSavingsAccount没有默认的构造函数,因此您需要显式调用它的构造函数:

JMTDCheckingAccount::JMTDCheckingAccount(double b, string a_n, double t_f) :
    JMTDSavingsAccount(b, a_n) 
{
    set_account_number(a_n);
    set_transaction_fee(t_f);
    set_balance(b);
}

检查参数是否匹配,我刚刚选择了ba_n,因为它们的名称与构造函数定义中的参数的名称匹配。

相关问题