Datum erhöhen
-
Du meinst do etwas wie:
Date():y(0),m(0),d(0){}
-
winux schrieb:
Du meinst do etwas wie:
Date():y(0),m(0),d(0){}Ein Konstruktor wäre natürlich sehr hilfreich.
-
Jetzt bekomme ich drei werte 0,1,0.
-
Was hast du denn nun gemacht?
-
So geschrieben wie du es gesagt hast.
-
du bekommst die Eins weil du immernoch den Fehler aus 10 posts mitschleppst... In Add_day steht n = 1, welches dort nicht stehen darf. darum auch die 1 in der zweiten Ausgabe.
Edit: Ich hatte einen Tippfehler bei der Datumsabfrage muss natürlich anstelle d>3 -> d>31 lauten. Dann sollte auch alles gehen. sry
-
Danke für den tipp genau da war der Fehler. Aber dort gibt es jetzt einen neuen Fehler wenn man Tag initialisiert und mit n addiert ( so etwas 29 + 3 = 32) dann erhaltet man einen ungültigen Tag wert.
-
Das ist dann deine nächste Aufgabe, wie muss Add-day aussehen, damit beim hinzufügen von Tagen die Tage/Monate/Jahre Monatsenden immer richtig angezeigt werden inklusive Schaltjahr versteht sich.
Leiste erstmal was und wenn nichts klappt dann frage erneut.
-
Offtop: Heute scheint der Tag der bekloppten Aufgaben zu sein ... erfind mal wer nen TÜV für c++ Profs...
-
Pisastudie macht auch vor Professoren keinen Halt!
-
Jetzt soll ich die Werte nicht mit cout sondern mit dem ostream& operator ausgeben. Doch der Compiler sagt das: error C2601: 'operator<<': Lokale Funktionsdefinitionen sind unzulässig.
void day_prog() { Date today; init_day(today,1978,6,25); // cout << today.d << endl; Date tomorrow; tomorrow.d = today.d; add_day(tomorrow,1); // cout << tomorrow.d << endl; Date non; init_day(non,789,56,-9); // cout << non.d << endl; ostream& operator<<(ostream& os,const Date& today) { return os << '(' << today.d << ')'; } } int main() { day_prog(); keep_window_open(); return 0; }
-
Die Fehlermeldung triffts auf den Punkt. Du kannst keine Funktionen innerhalb anderer Funktionen definieren.
-
Jetzt habe ich es außerhalb der Funktion geschrieben, das Programm startet aber die Konsole zeigt nichts an.
-
Deine Ausgaben sind sicher noch auskommentiert oder gar nicht erst geschrieben...
Falls nicht: Zeig den aktuellen Code (aber überleg bitte kurz, um offensichtliche Fehler zu vermeiden).
-
Das cout ist absichtlich auskommentiert weil die Übung sagt das es mit dem ostream& operator ausgeben werden soll.
#include "stdafx.h" #include "std_lib_facilities.h" using namespace std; struct Date{ int y; // Jahr int m; // Monat int d; // Tag }; void init_day(Date& dd,int y,int m,int d) // absichtlich falsche werte { if(y<1900 || y>2200 || m<1 || m>12 || d<1 || d>31) { dd.y = 0; dd.m = 0; dd.d = 0; } else { dd.y = y; dd.m = m; dd.d = d; } } void add_day(Date& dd,int n) // erhöhe Tag mit n { dd.d = dd.d + n; } void day_prog() { Date today; init_day(today,1978,6,25); // cout << today.d << endl; Date tomorrow; tomorrow.d = today.d; add_day(tomorrow,1); // cout << tomorrow.d << endl; Date non; // zum testen des konstruktors init_day(non,789,56,-9); // cout << non.d << endl; } ostream& operator<<(ostream& os,const Date& today) { return os << '(' << today.d << ')'; } int main() { // irgendwo sollte etwas stehen damit ostream ausgegeben werde soll keep_window_open(); return 0; }
-
Date date; init_day(date, 1955, 5, 15); ostream *strm = &cout; *strm << "Jahr: " << date.y << " Monat: " << date.m << " Tag: " << date.d << endl;
-
Danke für den Tipp aber geht das nicht mit dem ostream& operator. Mit diesem operator:
ostream& operator<<(ostream& os,const Date& today) { return os << '(' << today.d << ')'; }
-
winux, du rufst den
operator<<nirgends auf. Erwartest du, dass er sich von Zauberhand selbstständig macht und doch etwas ausgibt?Zu deinem letzten Post: Doch, das ist ja gerade was HighLigerBiMBam tut! Ich hab das Gefühl, du solltest noch einiges in deinem C++-Buch nachlesen.
P.S. Der
ostream-Zeiger ist eine unnötige Indirektion. Der Operator wird auch direkt beistd::coutaufgerufen.
-
So die Übung ist gelöst, danke an alle für die Hilfe.
-
winux schrieb:
So die Übung ist gelöst, danke an alle für die Hilfe.
Finde ich nicht, wenn ich deine add_day-Funktion anschaue.