2017-03-16 5 views
0

Ich übe OOP in C++ und ich erstelle eine Bankkontoklasse. Hier ist die Klassendefinition:C++ Klasseninstanz Deklaration keine passende Funktion

#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); 
    } 
}; 

Jetzt in meinem Hauptprogramm Ich versuche, eine Instanz dieser Klasse zu erklären,

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; 
} 

Jetzt funktioniert alles außer meinem Beispiel Erklärungen,

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====

Ich bin mir nicht sicher, warum es keinen passenden Anruf gibt. Ich übergebe es zwei Ints und drei Strings, was der Fehler zu sein scheint, den die meisten Leute machen, wenn ich die vorhandenen Bedrohungen gelesen habe.

Kann mir bitte jemand helfen? Danke!

Zane

+0

Sie haben keinen Konstruktor für 'Bankaccount (int acc_num, int acc_id_num, string acc_tel_no, string acc_first_name, string acc_last_name);' – Logman

+0

Es gibt keinen Konstruktor dieses 'Bankkonto zu nehmen (acc_num_int, 0, "", "", "") ' – Marcin

+0

Und bitte erstellen Sie Ihre Objekte nicht so:' bankAccount ba1 = bankAccount (...) '. Es funktioniert, ist aber unnötig kompliziert. Debuggen Sie es, um herauszufinden, was tatsächlich passiert. Die korrekte Syntax ist 'bankAccount ba1 (...)' – Rene

Antwort

1

Sie müssen nach Ihrem Bedarf parametrisierte Konstruktoren erklären. Alles, was Sie haben, ist ein Standardkonstruktor (oder kein Argument). Bitte lesen Sie den Konstruktor Abschnitt von jedem C++ Buch/Tutorial.

Darüber hinaus sollten Sie keine Objekte erstellen wie

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

obige Aussage wird ein namenlos Objekt erstellen und zu tun Bau von BA1 kopieren. Bitte lesen Sie über Kopierkonstruktoren. Wenn Sie ein einzelnes Objekt benötigen, ist dies eine Überladung für einen zusätzlichen Funktionsaufruf. Stattdessen können Sie Ihr Objekt wie erstellen unter

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

Danke dafür, ich schätze die schnelle Antwort. – Zane

Verwandte Themen