zuweisen eines strings
-
meine aufgabe ist es, zur vorgegebenen deklaration der klasse die methodendefinitionen zu erstellen. das sieht bisher so aus:
#include <iostream> using namespace std; class Bankaccount{ private: char depositor[20]; char number[20]; double balance; public: Bankaccount(const char *c_depositor,const char *c_number, double c_balance=0.0); void show(); void deposit(double cash); void withdraw(double cash); }; void Bankaccount::show(){ cout << "name of depositor: " << depositor << endl; cout << "account number: " << number << endl; cout << "balance: " << balance << endl; } void Bankaccount::deposit(double cash){ balance+=cash; } void Bankaccount::withdraw(double cash){ balance-=cash; } Bankaccount::Bankaccount(const char *c_depositor,const char *c_number, double c_balance){ depositor=c_depositor; number=c_number; balance=c_balance; } int main() { Bankaccount account1; account1.show(); system("PAUSE"); return 0; }leider kompiliert das nicht, da die zuweisung des pointers "c_depositor" auf den string "depositor" offenbar unzulässig ist. ich weiss, ich könnte das ganze auch machen, indem ich die string-klasse von c++ verwende, nur ist der definitionsteil der klasse schon vorgegeben, ich darf da also nichts ändern (nur die funktionsdefinitionen muss ich erstellen). wie kann ich dem character array einen string zuweisen (wenn nicht per pointer, wie dann)?
-
Hallo,
Schau mal nach strncpy.
-
Schau lieber nach std::string und erschlag denjenigen, der dir die Aufgabe gegeben hat, mit dem Hinweis, das char-Arrays altbacken sind und eigentlich nur dann Sinn machen, wenn die Performance gegen std::string spricht.
Und so weit, dass ihr schon auf Performance achtet, seid ihr gemessen an der Aufgabenstellung nicht./edit: ok, jetzt erst gelesen dass du über string Bescheid weißt. Bleibt nurnoch die Beseitigung des Aufgabenstellers

-
Jap der Aufgabensteller sollte erschossen werden, da er operatoren usw. nicht zu kennen scheint
UND ein using namespace im Header hat 
class Bankaccount { char depositor[20]; char number[20]; double balance; public: Bankaccount(const char* depositor, const char* number, double balance=0.0); void show(); void deposit(double cash); void withdraw(double cash); };... oder nutzt du schon irgendwo da was aus dem Header <iostream>?
Achja pack mal Include-Guards rein(auch wenn es nicht vorgegeben war ...)Dann im Sourcefile, brauchst du den Header ...
#include "Bankaccount.hpp" // class Bankaccount #include <iostream> // std::cout #include <cstring> // std::strncpy void Bankaccount::show() { std::cout << "\nname of depositor: " << depositor << "\naccount number: " << number << "\nbalance: " << balance << std::endl; } void Bankaccount::deposit(double cash) { balance += cash; } void Bankaccount::withdraw(double cash) { balance -= cash; } Bankaccount::Bankaccount(const char* ptr_depositor, const char* ptr_number, double balance) : balance(balance) // Initialisierungsliste { std::strncpy(depositor, ptr_depositor, 20); // Max. Anzahl an Zeichen die in depositor passen (d.h. Größe des Arrays) inklusive Nullterminierungszeichen std::strncpy(number, ptr_number, 20); }So ist es doch schon korrekter.
Hinweiß
Das geht wesentlich schöner, geht aber nicht, wenn du nichts im Header verändern darfst!Bearbeitung
Also, du hast einmal:char arr[20];und einmal
const char* ptr;... dass das nicht hinhauen kann, sollte doch klar sein.