我正在用C ++练习OOP,我正在创建一个银行帐户类。这是类定义:
#include <iostream>
#include <cmath>
#include <limits>
#include <string>
#include <cstring>
#include <sstream>
#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
using namespace std;
const int acc_num_length = 8;
const int acc_id_num_length = 13;
class bankAccount {
private:
int acc_num; // account number
int acc_id_num; // account holder ID number
string acc_tel_no; // account holder telephone number
string acc_first_name; // account holder first name
string acc_last_name; // account holder last name
public:
/* constructor */
bankAccount() {
acc_num = 0;
acc_id_num = 0;
acc_tel_no = "";
acc_first_name = "";
acc_last_name = "";
}
/* detail retrieval */
int get_acc_num() {
return(acc_num);
}
int get_acc_id_num() {
return(acc_id_num);
}
string get_acc_tel_no() {
return(acc_tel_no);
}
string get_acc_first_name() {
return(acc_first_name);
}
string get_acc_last_name() {
return(acc_last_name);
}
};
现在在我的主程序中,我正在尝试声明此类的实例,
int main() {
float acc_num = 0;
while ( ((cout << "Enter account number: ") && !(cin >> acc_num)) || (floor(acc_num) < acc_num) ) {
cout << "Invalid account number.\n";
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
int acc_num_int = acc_num;
string acc_num_string = to_string(acc_num_int);
while ( acc_num_string.length() != acc_num_length ) {
cout << "Invalid account number (8 characters only).\n";
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cin >> acc_num;
cout << "Enter account number: \n";
}
bankAccount ba1 = bankAccount(acc_num_int,0, "","","");
bankAccount ba2 = bankAccount();
return 0;
}
现在一切正常,除了我的实例声明,
C:/ Cartrack / C ++ /创建表单/ Form / main.cpp:在函数'int中 main()':C:/ Cartrack / C ++ /创建表单/ Form / main.cpp:68:67:错误: 调用'bankAccount :: bankAccount(int&amp;,long)没有匹配函数 long int,const char [1],const char [1],const char [1])'
bankAccount ba1 = bankAccount(acc_num_int,0,“”,“”,“”); ^ C:/ Cartrack / C ++ /创建表单/ Form / main.cpp:25:2:注意:候选人: bankAccount :: bankAccount()bankAccount(){^ ~~~~~~~~~~ C:/ Cartrack / C ++ /创建表单/ Form / main.cpp:25:2:注意:候选人 期望0个参数,5提供C:/ Cartrack / C ++ / Creating a form / Form / main.cpp:16:7:注意:候选人: bankAccount :: bankAccount(const bankAccount&amp;)class bankAccount { ^ ~~~~~~~~~~ C:/ Cartrack / C ++ /创建表单/ Form / main.cpp:16:7:注意:候选人需要1个参数,5个提供 C:/ Cartrack / C ++ /创建表单/ Form / main.cpp:16:7:注意:候选人: bankAccount :: bankAccount(bankAccount&amp;&amp;)C:/ Cartrack / C ++ / Creating a form / Form / main.cpp:16:7:注意:候选人需要1个参数,5 提供了mingw32-make.exe [1]: * [Form.mk:97:Debug / main.cpp.o]错误 1 mingw32-make.exe [1]:离开目录'C:/ Cartrack / C ++ /创建一个 表单/表单'mingw32-make.exe:* [Makefile:5:All]错误2 ==== 1个错误,6个警告====
我不确定为什么没有匹配的电话。我传递了两个整数和三个字符串,这似乎是大多数人在阅读现有威胁时所犯的错误。
有人可以帮忙吗? 谢谢!
赞恩
答案 0 :(得分:1)
您需要根据需要声明参数化构造函数。你所拥有的只是默认(或零参数)构造函数。 请阅读任何C ++书籍/教程的构造函数部分。
此外,您不应该创建像
这样的对象 bankAccount ba1 = bankAccount(acc_num_int,0, "","","");
上面的语句将创建一个无名对象,并复制ba1的构造。请阅读复制构造函数。当您需要单个对象时,这是额外函数调用的重载。相反,你可以像下面那样创建你的对象
bankAccount ba1(acc_num_int,0, "","","");