Fehler E2034 Konvertierung von float nach konto nicht möglich
-
ManuEllen schrieb:
[Rewind] schrieb:
Vielleicht klappt's mit
kto[i].Einz = i*500; kto[i].Zins = i/100; kto[i].Erge = kto[i].Einz * kto[i].Zins;eine gute idee vielen dank
ich probier´s mal aus@Skym0sh0 danke ich hab jetzt verstanden was du meintest
ManuEllen schrieb:
so ^^ ich hab´s probiert, aber nun geht gar nichts mehr...
fällt jmd vielleicht ein anderer lösungsweg ein?Kann ja eg auch nicht funzen, da die Member ja privat sind oder nicht?
Es wäre auch nützlich wenn du die Fehler immer aufführst oder sagst was nicht läuftLg freeG
-
ich hab im private nur
int Einz; float Zins, Erge;im public hab ich dann
konto(int, float, float) ; konto(){Einz=0; Zins=0; Erge=0; return;} ~konto();Also mein Problem ist:
ich soll ja 10 Konten machen, ich würde die gerne als schleife machen da ich sonst den Zinssatz usw. jedesmal eingeben müssteaber dass:
kto[i]=(Einzahlung, Zinssatz, Erg);funktioniert nicht
und ich weiß nicht wie ich die werte dann richtig zuweisen muss
-
#include <iostream> using namespace std; class konto { private: int Einz; float Zins, Erge; public: konto(int ein, float zin, float erg) : Einz( ein ), Zins( zin ), Erge( erg ) {} konto(){Einz=0; Zins=0; Erge=0; return;} int ausgabeEinzahlung() { return Einz; } float ausgabeZinssatz() { return Zins; } float ausgabeErgebnis() { return Erge; } }; int main() { const int anz= 10; konto kto[anz]; for(int i=1; i<=anz; i++) { int Einzahlung = i * 500; float Zinssatz = static_cast< float >(i) / 500; float Erg = Einzahlung * Zinssatz; kto[i-1]=konto(Einzahlung, Zinssatz, Erg); cout<<"Das Konto Nr"<<i<<" hat eine Einzahlung von:"<< kto[i-1].ausgabeEinzahlung() <<". "<<endl; float output1 = kto[i-1].ausgabeZinssatz(); cout<<"einen Zinssatz von: "<< output1 << endl; float output2 = kto[i-1].ausgabeErgebnis(); cout<<"und ein Erg von "<< output2 <<endl; } cin.get(); }So sollte es gehen. Allerdings ist das ganze finde ich richtig unschön. Ich würde z.B. Vektoren statt Arrays nutzen und und und...
Außerdem scheint es mir, als hättest du die Grundlagen nicht so recht verstanden, oder sie sind Euch falsch beigebracht worden. Da waren ein paar grundlegende Fehler drin.Lg freeG
EDIT: Habe nur die Einrücken und die Formatierung vom Code ein bisschen geändert, sodass es leichter zu lesen ist.
-
Du hast gleich mehrere Probleme:
Sowohl für den Konstruktor konto(int, float, float) als auch für den Destruktor ~konto() existiert zwar eine Deklaration aber keine Definition, wie du sie z.B. für den Konstruktor konto() hingeschrieben hast.
Dann würde ich die Arraydefinition konto kto[anz] aus der Schleife herausnehmen.
Und letztlich bei der Zuweisung kto[i]=(Einzahlung, Zinssatz, Erg) einfach mit Hilfe des entsprechenden Konstruktors ein Objetk erzeugen. So ungefähr: kto[i]= konto(Einzahlung, Zinssatz, Erg);
Dann noch die Berechnung vom Zinsatz. Wenn du innerhalb von int eine Division machst wird der Wert hinter dem Komma einfach weggeworfen. D.h du musst dafür sorgen, dass dein Ausdruck vor der Berechnung nach float konvertiert wird. Dies erreichst du einfach indem du aus dem integer Literal 100 das float Literal 100.0 machst.
Zu den Headern und der Standardproblematik mit void main() usw. wird sich vermutlich noch jemand äußern.

-
VIELEN DANK

ich hab mir schon gedacht, dass mein "Programm" eine katastrophe ist ^^einiges wo du verwendet hast, haben wir bisher noch nicht gehabt
(genau so wie vektoren)Aber Daaaaaaaaaanke !!
-
hast du zufällig ein gutes tutorial für anfänger ?
-
ManuEllen, bitte lies dir einmal den Link in meiner Signatur durch und beherzige ihn! Sowas wie "funktioniert immer noch nicht", ohne deinen neuen Code (in lesbarer Form bitte!) und die Fehlermeldung zu zeigen, bringt weder dich noch die Helfer hier vorwärts. Das ist für alle reine Zeitverschwendung!
-
du hast am ende folgenden code
fr33g schrieb:
cin.get();EDIT:
was bezweckt er?
dadurch wird ja ein Zeichen eigelesen oder?
-
ManuEllen schrieb:
VIELEN DANK

ich hab mir schon gedacht, dass mein "Programm" eine katastrophe ist ^^einiges wo du verwendet hast, haben wir bisher noch nicht gehabt
(genau so wie vektoren)Aber Daaaaaaaaaanke !!
Nichts zu Danken, aber wie gesagt, dass waren einige elementare Fehler. Habe auch nicht alle in deinem Code verbessert, die meisten( die die hmpf nochmals erwähnte ) hab ich allerdings geändert.
Nur um noch ein paar zu nennen:
Der Destrutor ist sowieso in deinem Fall unnötig...
Der Standardkonstruktor sollte auch die Elementinitialisierungsliste verwenden...
Deine Klasse sollte in einer Header-Datei definiert werden...die Elementfunktionen sollten dann in einer getrennten .cpp Datei definiert werden, außer du möchtest sie inlinen...Lg freeG
EDIT:
Zu deinem letzten post bezüglich des
cin.get();:
http://www.cplusplus.com/reference/iostream/istream/get/Hab ich nur für dich reingemacht
, du hattest ja vorher getch() benutzt. Aus dem gleichen Grund, damit das Programm erst nach einer Eingabe endet, hab ich das cin.get() eingeführt. Denn getch() ist ja eg noch von C und cin.get() ist C++. wird natürlich nicht nur dafür benutzt, sondern um Eingaben einzulesen, siehe Link oben.Lg freeG
-
Ich habe so das Gefühl, dass der Lehrer irgendwie etwas anderes erwartet.
Vermutlich soll die Kontonummer nicht per Konstruktor übergeben werden (zumindest würde ich erwarten, dass ich einfach ein Konto erstelle und mir eine Kontonummer zugewiesen wird). Der Zinssatz wird im Konstruktor berechnet.
Dann Erfolgt eine Einzahlung. Resultierendes Guthaben werden dann von einer member-Funktion berechnet und entsprechend gespeichert.
Warum sollte der Benutzer diese Werte berechnen?
Momentan hat Konto bis auf die Speicherung von drei Werten absolut keine Funktionalität.Und dann eben noch n paar Kleinigkeiten (z.B. die ausgabe-Funktionen alle const deklarieren etc.)
-
fr33g schrieb:
Deine Klasse sollte in einer Header-Datei definiert werden...die Elementfunktionen sollten dann in einer getrennten .cpp Datei definiert werden, außer du möchtest sie inlinen...
das mache ich immer erst wenn das programm funktioniert

-
inter2k3 schrieb:
Ich habe so das Gefühl, dass der Lehrer irgendwie etwas anderes erwartet.
Vermutlich soll die Kontonummer nicht per Konstruktor übergeben werden (zumindest würde ich erwarten, dass ich einfach ein Konto erstelle und mir eine Kontonummer zugewiesen wird). Der Zinssatz wird im Konstruktor berechnet.
Dann Erfolgt eine Einzahlung. Resultierendes Guthaben werden dann von einer member-Funktion berechnet und entsprechend gespeichert.
Warum sollte der Benutzer diese Werte berechnen?
Momentan hat Konto bis auf die Speicherung von drei Werten absolut keine Funktionalität.Und dann eben noch n paar Kleinigkeiten (z.B. die ausgabe-Funktionen alle const deklarieren etc.)
Das kann ich nicht beurteilen und ist mir auch ziehmlich egal, der TE wollte es so und so hat ers bekommen

Er wird ja wohl selber wissen, wie sein Programm funktionieren soll. Ansonsten können wir ihm ja auch schlecht helfen, außer er hat die genaue Aufgabenstellung von seinem Lehrer.Lg freeG
-
Das war keine Kritik an deinem code fr33g, sondern war als Denkanstoss für den TE gedacht

-
die aufgabenstellung habe ich ja ganz am anfang mit reingestellt...
das Programm sollte ja ohne viel Schnick-Schnack sein
achja.. die Berrechnung kann ich ja eigentlich wirklich in die class mitrein setzenEDIT: danke für den "Denkanstoß" aber im Moment bin ich froh dass es jetzt funktioniert^^
-
Leute ...

ich hab das Programm verbessert und es funktioniert ;P
also die Berechnung hab ich jetzt in der Klasse drin
außerdem hab ich den Speicher dynamisch verwaltetnochmals DANKE, ohne eure Hilfe hätte ich noch Tage lang an der Aufgabe gesessen
lg Manuela
-
ManuEllen schrieb:
Leute ...

...außerdem hab ich den Speicher dynamisch verwaltet...Ehm zeig mal bitte den Code, denn dynamisch verwalten heißt nicht automatisch besser

Lg freeG
-
(dynamische Speicherverwaltung ist bei der Aufgabe gefordert)
es kann sein das ihr Profis, das Ganze ein wenig anders machen würdet,
aber ich bin der Meinung das es so wie´s nun ist ganz in Ordnung ist
#include <iostream.h> #include <conio.h> class konto { private: int Einz; float Zins, Betr, Erge; public: int kontonummer; konto(int ein, float zin, float betr, float erg) {Einz=ein; Zins=zin; Betr= betr; Erge= erg ;} konto(){Einz=0; Zins=0; Betr=0; Erge=0; return;} void berechnung(); int ausgabeEinzahlung(); float ausgabeZinssatz(); float ausgabeBetrag(); float ausgabeErgebnis(); }; void konto:: berechnung() { Einz = kontonummer * 500; Zins = kontonummer/ 100.0; Betr = Einz*Zins; Erge = Einz + Betr; } int konto:: ausgabeEinzahlung() { return Einz; } float konto:: ausgabeZinssatz() { return Zins; } float konto:: ausgabeBetrag() { return Betr; } float konto:: ausgabeErgebnis() { return Erge; } int main() { konto *kto=NULL; int anz; cout<<endl<<"Wie viele Konten sollen erstellt werden?; cin>>anz; kto=new konto[anz]; float Zinssatz, Betrag, Erg; for(int i=0; i<anz; i++) { kto[i].kontonummer=i+1; kto[i].berechnung(); cout<<"Das Konto Nr"<<kto[i].kontonummer<<" hat eine Einzahlung von:" << kto[i].ausgabeEinzahlung() <<endl; cout<<"einen Zinssatz/-betrag von: "<< kto[i].ausgabeZinssatz() <<" Betr: " << kto[i].ausgabeBetrag()<<endl; cout<<"und ein Erg von "<< kto[i].ausgabeErgebnis() <<endl; } delete []kto; kto =NULL; getch(); }lg Manuela
-
@ fr33g
ja was sagst du zu meinem Programm?
ist´s so okay?
-
Ich bin zwar nicht fr33g, aber:
- für die Konstruktoren solltest du lieber Initialisierungslisten verwenden
- public-Member sind ungünstig, weil du nicht kontrollieren kannst, wer diese verändert
- die berechnung() Methode sieht (inhaltlich) eigenartig aus - bist du sicher, daß das so gemacht werden soll?
- verwende lieber double anstelle von float
- und vector<> anstelle des manuell verwalteten Speichers
-
ManuEllen schrieb:
@ fr33g
ja was sagst du zu meinem Programm?
ist´s so okay?Ich bin auch nicht fr33g, aber gebe auch mal meinen Senf dazu...
Zuerst fällt mir die Einrückung auf, die nicht sonderlich leserlich ist. Die Initialisierungen sollte man auf mehrere Zeilen verteilen bzw. sogar Initialisierungslisten verwenden. Deine Funktionsnamen sind übrigens irreführend. Bei einer Funktion ausgabe... erwarte ich, das diese Zeile auch eine Ausgabe macht. Deine Funktionen geben aber nur einen Wert zurück.