Hilfe! Übergabe eines Wertes von main.cpp in class [Problem GELÖST]
-
Hallo,
Ich habe das Problem, dass ein eingelesener Wert in der main.cpp in eine class übergeben werden soll.
Ich habe alles soweit Programmiert und bekomme eine Fehlermeldung.
Jedoch kann ich mit der Meldung nichts anfangen. Soll heisen ich weiss nicht was ich anders machen muss damit der Fehler behoben ist.#include <iostream> #include "Minuten.h" #include <windows.h> using namespace std; int main() { double Z; int Zeitsumme=0; Minuten Zeit; double Zeitspanne; do { cout << "Gebe ganzzahlige Zeitspanne ein: "; cin >> Z; //einlesen der Zeitspanne in "Z" Minuten* pZeitspanne; // Zeiger definieren pZeitspanne = new Minuten (Z); // erzeugt neues Objekt cout << endl; Zeit.Ausgabe(); } while (Z > 0); system ("pause"); return 0; }//In main.cpp line 20: error: no matching function for call to 'Minuten::Minuten(double&)'
#include "Minuten.h" #include <iostream> using namespace std; Minuten::Minuten(double Zeitpanne) { Z=Zeitspanne; } //Minuten::~Minuten() //{ //dtor //} int Minuten::berechneStunden() { Std=(Zeitspanne/60); //Anzahl Stunden in Dezimal Stunden=static_cast<int>(Std); //Anzahl Stunden als int-Wert d.h. OHNE Nachkommastelle return 0; } int Minuten::berechneMinuten() { MinutenBerechnung=(Std-Stunden)*60; return 0; } void Minuten::Ausgabe() { this->berechneStunden(); this->berechneMinuten(); cout << "Die angegebene Zeitspanne entspricht "<< Stunden << " Stunden und " << MinutenBerechnung << " Minuten" << endl; }#ifndef MINUTEN_H #define MINUTEN_H using namespace std; class Minuten { public: Minuten(); int berechneStunden(); int berechneMinuten(); void Ausgabe(); double Std; int MinutenBerechnung; int Stunden; double Zeitspanne; double Z; }; #endif // MINUTEN_HIch danke schon einmal im voraus.
-
In deiner
Minuten.hmuss der Konstruktur natürlich die gleichen Parameter haben wie auch in deinerMinuten.cppDatei.
-
Jetzt nach der Änderung, wie ich den Tipp verstanden habe kommt eine ähnliche Fehlermeldung in Line 11.
Tut mir leid wenn ein paar von euch die Hände über den Kopf zusammenschlagen aber ich bin blutiger anfänger und noch dabei C++ zu verstehen.
#include <iostream> #include "Minuten.h" #include <windows.h> using namespace std; int main() { double Z; int Zeitsumme=0; Minuten Zeit; double Zeitspanne; do { cout << "Gebe ganzzahlige Zeitspanne ein: "; cin >> Z; //einlesen der Zeitspanne in "Z" Minuten* pZeitspanne; // Zeiger definieren pZeitspanne = new Minuten (Z); // erzeugt neues Objekt cout << endl; Zeit.Ausgabe(); } while (Z > 0); system ("pause"); return 0; }//In main.cpp line 11: error: no matching function for call to 'Minuten::Minuten'
#include "Minuten.h" #include <iostream> using namespace std; Minuten::Minuten(double Zeitpanne) { Z=Zeitspanne; } //Minuten::~Minuten() //{ //dtor //} int Minuten::berechneStunden() { Std=(Zeitspanne/60); //Anzahl Stunden in Dezimal Stunden=static_cast<int>(Std); //Anzahl Stunden als int-Wert d.h. OHNE Nachkommastelle return 0; } int Minuten::berechneMinuten() { MinutenBerechnung=(Std-Stunden)*60; return 0; } void Minuten::Ausgabe() { this->berechneStunden(); this->berechneMinuten(); cout << "Die angegebene Zeitspanne entspricht "<< Stunden << " Stunden und " << MinutenBerechnung << " Minuten" << endl; }#ifndef MINUTEN_H #define MINUTEN_H using namespace std; class Minuten { public: Minuten(double Z, double Zeitspanne); //meine änderung zum vorherigen int berechneStunden(); int berechneMinuten(); void Ausgabe(); double Std; int MinutenBerechnung; int Stunden; double Zeitspanne; double Z; }; #endif // MINUTEN_HIch danke schon einmal im voraus.
-
Das entspricht ja auch noch immer nicht dem was in deiner cpp Datei steht. Dort hast du:
Minuten(double Zeitpanne). Also muss auch eine Funktion mit den gleichen Parametern in deiner Header Datei auftauchen.
-
Das hab ich verstanden.
//.h - File Minuten (double Zeitspanne); //Minuten.cpp - File Minuten::Minuten(double Zeitspanne) { Z=Zeitspanne }Dennoch bekomme ich den Fehler in Line 11 angezeigt.
Falls es das immer noch nicht ist was du meinst, wäre es super wenn du die 3 Zeilen in korrekter weise mal schreiben könntest.
Danke

-
Was willst du da eigentlich machen?
Warum gibt es Zeit und pZeitspanne? pZeitspanne wird nie wirklich benutzt.Der Fehlermeldung im aktuellen Code kommt von Zeit, da du keinen Konstruktor mehr hast, der ohne eine Parameter auskommt.
-
Das ist eine Aufgabenstellung:
Schreiben Sie ein Programm, das solange Minutenwerte einliest bis es keine valide
Ganzzahl bekommt. Das Programm soll die Minuntenwerte in Stunden und Minuten
umrechnen und formatieren. Bevor das Programm beendet, soll die Gesamtdauer aller
Eingaben in Minuten angezeigt werden.Schreiben Sie ein Hauptprogramm, das in einer Endlosschleife solange Werte
einliest bis keine gültige Ganzzahl mehr eingeben wird. Für jeden eingelesenen
Wert soll ein neues Minuten-Objekt auf dem Heap erzeugt werden. Die
Ausgabe erfolgt über den Aufruf ausgabe(). Zusätzlich soll jeder eingelesene
Minutenwert einer Gesamtvariablen aufaddiert werden und beim Beenden des
Programms ausgegeben werden. Denken Sie auch daran den reservierten Speicher
wieder freizugeben.(Das dass nicht mit Heap gelöst werden muss weiss ich.)
manni66 schrieb:
Was willst du da eigentlich machen?
Warum gibt es Zeit und pZeitspanne? pZeitspanne wird nie wirklich benutzt.Um den new-Operator zu verwenden benötige ich doch einen Zeiger, oder?
-
TiGei schrieb:
manni66 schrieb:
Was willst du da eigentlich machen?
Warum gibt es Zeit und pZeitspanne? pZeitspanne wird nie wirklich benutzt.Um den new-Operator zu verwenden benötige ich doch einen Zeiger, oder?
Nein, um das mit new erzeugte zu verwenden brauchst du einen Zeiger. Dann fehlt aber so etwas wie
pZeitspanne->ausgabe();
So wie du es machst wird einfach ein Objekt erzeugt und dann vergessen (du hast auch nicht daran gedacht, den reservierten Speicherplatz wieder freizugeben).
-
#include <iostream> #include "Minuten.h" #include <windows.h> using namespace std; int main() { double Z; int Zeitsumme=0; // Minuten Zeit; double Zeitspanne; do { cout << "Gebe ganzzahlige Zeitspanne ein: "; cin >> Z; //einlesen der Zeitspanne in "Z" Minuten* pZeitspanne; // Zeiger definieren pZeitspanne = new Minuten (Z); // erzeugt neues Objekt cout << endl; pZeitspanne -> Ausgabe(); delete pZeitspanne; } while (Z > 0); system ("pause"); return 0; }Ich habe die Anmerkungen mal umgesetzt.
#include "Minuten.h" #include <iostream> using namespace std; Minuten::Minuten(double Z) { Z=Zeitspanne; } //Minuten::~Minuten() //{ //dtor //} int Minuten::berechneStunden() { Std=(Zeitspanne/60); //Anzahl Stunden in Dezimal Stunden=static_cast<int>(Std); //Anzahl Stunden als int-Wert d.h. OHNE Nachkommastelle return 0; } int Minuten::berechneMinuten() { minuten=(Std-Stunden)*60; //return - Wert benötigt? return 0; } void Minuten::Ausgabe() { this->berechneStunden(); this->berechneMinuten(); cout << "Die angegebene Zeitspanne entspricht "<< Stunden << " Stunden und " << minuten << " Minuten" << endl; }#ifndef MINUTEN_H #define MINUTEN_H using namespace std; class Minuten { public: Minuten(double Z); int berechneStunden(); int berechneMinuten(); void Ausgabe(); double Std; int minuten; int Stunden; double Zeitspanne; //double Z; }; #endif // MINUTEN_HJetzt habe ich keine Fehlermeldung mehr. Aber bei der Ausführung des Programms werden die Methoden nicht durchgeführt. Also denke ich mir mal das der eingelesene Wert immer noch nicht übergeben wurde.
-
Die Reihenfolge der Zuweisung ist falsch herum:
Minuten::Minuten(double Z) { Z=Zeitspanne; }Hier ist
Zja dein Parameter undZeitspanneist die Membervariable.
-
Super es klappt.
Mir war auch nicht klar das es eine Reihenfolge gibt.
Vielen Dank für eure Hilfe.
