auf Objekt zugreifen funktioniert nicht
-
Hallo,
ich baue gerade ein kleines Programm, dass eine Liste von Teilnehmern erstellt und diese auch ausgeben soll.
Der Teilnehmer wird auch richtig erstellt, da ich ihn mir direkt danach ausgeben lassen kann.
Wenn ich allerdings zurück ins Menu springe und ihn mir dann ausgeben lassen will, dann wird bereits beim Programmieren das Objekt rot unterstrichen.Hier die main.cpp, in dem das Problem auftritt:
#include "menu.h" #include "teilnehmer.h" int anzahlTeilnehmer; int main() { //Objekt ruft Kontruktor auf, welcher dann über die set-Funktionen die Eingabe vom Nutzer fordert menu menu; //Teilnehmer erstellen do { anzahlTeilnehmer++; teilnehmer teilnehmer1; cout << "++++++++++++++++++++++++++++++++" << endl; menu.Auswahl == 0; menu.setAuswahl(); } while (menu.Auswahl == 1); //alle Teilnehmer ausgeben do { //for (int n = 1; n < anzahlTeilnehmer; n++){ teilnehmer1.getTeilnehmerDaten(); cout << "++++++++++++++++++++++++++++++++" << endl; menu.Auswahl == 0; menu.setAuswahl(); //} } while (menu.Auswahl == 2); }Rot unterstrichen wird mir das "teilnehmer1" bei "teilnehmer1.getTeilnehmerDaten();" - weil der Bezeichner nicht definiert sei.
Ich hoffe, ihr habt das Problem verstanden und könnt mir einen Tipp geben.

Grüße
DasObjekt
-
#include "menu.h" #include "teilnehmer.h" int anzahlTeilnehmer; int main() { //Objekt ruft Kontruktor auf, welcher dann über die set-Funktionen die Eingabe vom Nutzer fordert menu menu; //Teilnehmer erstellen do { anzahlTeilnehmer++; teilnehmer teilnehmer1; //hier wird teilnehmer1 bei jedem Schleifendurchlauf neu erstellt cout << "++++++++++++++++++++++++++++++++" << endl; menu.Auswahl == 0; menu.setAuswahl(); } while (menu.Auswahl == 1); //hier gibt es teilnehmer1 nicht mehr, da scope der schleife verlassen wurde //alle Teilnehmer ausgeben do { //for (int n = 1; n < anzahlTeilnehmer; n++){ teilnehmer1.getTeilnehmerDaten(); //hier dementsprechend auch nicht cout << "++++++++++++++++++++++++++++++++" << endl; menu.Auswahl == 0; menu.setAuswahl(); //} } while (menu.Auswahl == 2); }
-
Hallo,
vielen Dank für die rasche Antwort.
Klingt logisch: Auf etwas zugreifen, das nicht (mehr) existiert, geht nicht.
Gibt es eine Möglichkeit, das Objekt auch bei Verlassen der Schleife am Leben zu halten?
Ich wollte, später, für mehrere Einträge verschiedene Objekte in Form von "teilnehmer1", "teilnehmer2" etc. erstellen lassen und das mit einer for-Schleife und der Variable anzahlTeilnehmer lösen.
Anscheinend falsch gedacht?
Aber wie dann?
Grüße
dasObjekt
-
DasObjekt schrieb:
Gibt es eine Möglichkeit, das Objekt auch bei Verlassen der Schleife am Leben zu halten?
Jain. Außerhalb deklarieren. Die andere Möglichkeit willst du auf deinem Kenntnisstand gar nicht wissen.
Ich wollte, später, für mehrere Einträge verschiedene Objekte in Form von "teilnehmer1", "teilnehmer2" etc. erstellen lassen und das mit einer for-Schleife und der Variable anzahlTeilnehmer lösen.
Stopp! Holzweg! Du suchst Container, wie z.B. std::vector. Perfekte Lösung für dein Problem. Wenn du Schleifen schon gelernt hast, kommt in deinem Lehrbuch (wenn es gut ist) bestimmt bald std::vector.
-
indem du teilnehmer1 VOR dem do definierst, dann ist teilnehmer1 innerhalb von main bekannt und nicht nur innerhalb von do .. while.
Willst du mehrere Teilnehmer verwalten, könntest du diese in einem vector speichern.
-
Okay, also werde ich auf Vektoren zurückgreifen müssen.
Gut, dass davon in der Vorlesung absolut 0 gesagt wurde.
Oh man...
Dickes dankeschön an euch,
werde das nun mal alles umbasteln.
-
Hallo,
wollte kurz Bescheid geben, dass der Umbau mit den Vektoren super geklappt hat.
Habe jetzt allerdings ein weiteres, kleines Problem:Ich will das Alter einer Person bestimmen.
Dazu habe ich die aktuelle Zeit wie folgt abgerufen:time_t Zeitstempel; tm *aktuell; Zeitstempel = time(0); aktuell = localtime(&Zeitstempel);Das Geburtsdatum habe ich als 3 Integer vorliegen (Geburtsdatumdd, Geburtsdatummm und Geburtsdatumyyyy), sprich für Tage, Monate und Jahre jeweils 1 Integer.
Über
datumsdifferenz = difftime( time_t time2, time_t time1 );Kann ich ja die Differenz berechnen lassen,
jedoch weiß ich nicht, wie ich da die 3 Integer als time_t time1 hineinbekomme.Für Tipps ein dickes Dankeschön!

-
Vielleicht hilft dir das weiter: http://www.cplusplus.com/reference/clibrary/ctime/mktime/
-
Grüß dich,
Danke für den Tipp!
Diese Seite ist quasi mein neues Zuhause - daher weiß ich auch, dass es difftime etc. gibt.
Wie gesagt, mir geht es nur noch darum, wie ich mit difftime die Differenz zwischen zwei Datumsangaben berechnen kann. Ich habe ja quasi alles, nur weiß ich nicht, wie ich das C++ beibringe.
-
Mir raucht der Kopf, aber ich habe es!
time_t Zeitstempel; tm *aktuell; Zeitstempel = time(0); aktuell = localtime(&Zeitstempel); DatumHeute = ( ( aktuell->tm_year + 1900 ) * 10000 ) + ( ( aktuell->tm_mon + 1 ) * 100 ) + ( aktuell->tm_mday ); DatumDamals = ( Geburtsdatumyyyy * 10000 ) + ( Geburtsdatummm * 100 ) + ( Geburtsdatumdd ); Alter = DatumHeute - DatumDamals; alter.push_back( Alter );Danke nochmal!

-
Kleine Korrektur noch:
Das Alter muss man noch durch 10000 teilen!