我不知道如何修复此构造函数。它不断返回错误:“没有匹配的函数来调用'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(){
}
答案 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);
}
检查参数是否匹配,我刚刚选择了b
和a_n
,因为它们的名称与构造函数定义中的参数的名称匹配。