【问题标题】:C++ class instance declaration no matching functionC++ 类实例声明没有匹配的函数
【发布时间】:2017-03-16 05:35:17
【问题描述】:

我正在用 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: In function 'int main()': C:/Cartrack/C++/创建表单/Form/main.cpp:68:67: 错误: 没有匹配函数调用'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++/创建表单/Form/main.cpp:25:2: 注意:候选: 银行账户::银行账户() 银行账户() { ^~~~~~~~~~~ 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&) 类 bankAccount { ^~~~~~~~~~~ C:/Cartrack/C++/创建表单/Form/main.cpp:16:7: 注意:候选人需要1个参数,提供5个 C:/Cartrack/C++/创建表单/Form/main.cpp:16:7: 注意:候选: bankAccount::bankAccount(bankAccount&&) C:/Cartrack/C++/创建一个 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++/Creating a form/Form' mingw32-make.exe: * [Makefile:5: All] 错误 2 ====1 个错误,6 个警告====

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

有人可以帮忙吗? 谢谢!

赞恩

【问题讨论】:

  • 你没有bankAccount(int acc_num, int acc_id_num, string acc_tel_no, string acc_first_name, string acc_last_name);的构造函数
  • 没有构造函数取这个bankAccount(acc_num_int,0, "","","")
  • 请不要像这样创建您的对象:bankAccount ba1 = bankAccount(...)。它有效,但不必要地复杂。调试它以找出实际发生的情况。正确的语法是bankAccount ba1(...)

标签: c++


【解决方案1】:

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

此外,你不应该创建像

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

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

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

【讨论】:

  • 感谢您的回复,感谢您的快速回复。
猜你喜欢
  • 2022-01-15
  • 2018-03-08
  • 1970-01-01
  • 2015-03-01
  • 2017-02-27
  • 1970-01-01
  • 2014-09-09
  • 2021-12-10
  • 1970-01-01
相关资源
最近更新 更多