C++类实例声明无匹配函数

标签 c++

我正在使用 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++/Creating a form/Form/main.cpp: In function 'int main()': C:/Cartrack/C++/Creating a form/Form/main.cpp:68:67: error: no matching function for call to 'bankAccount::bankAccount(int&, long long int, const char [1], const char [1], const char [1])'
bankAccount ba1 = bankAccount(acc_num_int,0, "","",""); ^ C:/Cartrack/C++/Creating a form/Form/main.cpp:25:2: note: candidate: bankAccount::bankAccount() bankAccount() { ^~~~~~~~~~~ C:/Cartrack/C++/Creating a form/Form/main.cpp:25:2: note: candidate expects 0 arguments, 5 provided C:/Cartrack/C++/Creating a form/Form/main.cpp:16:7: note: candidate: bankAccount::bankAccount(const bankAccount&) class bankAccount { ^~~~~~~~~~~ C:/Cartrack/C++/Creating a form/Form/main.cpp:16:7: note: candidate expects 1 argument, 5 provided C:/Cartrack/C++/Creating a form/Form/main.cpp:16:7: note: candidate: bankAccount::bankAccount(bankAccount&&) C:/Cartrack/C++/Creating a form/Form/main.cpp:16:7: note: candidate expects 1 argument, 5 provided mingw32-make.exe[1]: * [Form.mk:97: Debug/main.cpp.o] Error 1 mingw32-make.exe[1]: Leaving directory 'C:/Cartrack/C++/Creating a form/Form' mingw32-make.exe: * [Makefile:5: All] Error 2 ====1 errors, 6 warnings====

我不确定为什么没有匹配的调用。我将两个整数和三个字符串传递给它,这似乎是大多数人在通读现有威胁时所犯的错误。

有人可以帮忙吗? 谢谢!

赞恩

最佳答案

您需要根据需要声明参数化构造函数。您所拥有的只是默认(或零参数)构造函数。 请阅读任何 C++ 书籍/教程的构造函数部分。

此外,你不应该创建像

这样的对象
 bankAccount ba1 = bankAccount(acc_num_int,0, "","","");

上面的语句将创建一个无名对象并进行 ba1 的复制构造。请阅读有关复制构造函数的信息。当您需要单个对象时,这是额外函数调用的重载。相反,您可以像下面这样创建您的对象

bankAccount ba1(acc_num_int,0, "","","");

关于C++类实例声明无匹配函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42826047/

相关文章:

c++ - 使用线程的段错误

c++ - 关于使用 ifstream 读取文件,为什么我的程序在 Windows 和 Linux 上产生不同的结果?

c++ - 二进制流中位的位置

c++ - 简单记录器实现 C++ 中的详细级别

C++ 对主要参数的引用

c++ - 在 Qt5 中实现基于单元格的小部件

c++ - 我无法在我的 if 语句中识别 endl 字符\n

c++ - c++ final 非虚拟类是否被重新解释为可以安全使用的数组?

c++ - AMD OpenCL fatal error : CL/cl. hpp:没有这样的文件或目录

c++ - C++0x 正式发布了吗?主要编译器支持吗?