Fehler 'terminated with status 1'
-
Hey Leute! Ich habe wiedermal eine Frage:
Unzwar sollten wir ein Programm entwickeln welches Daten einlesen, kontrollieren, vergleichen etc. kann.
Das Programm ist fertig und es funktionierte auch. Nur urplötzlich lässt es sich nicht mehr ausführen, Fehlermeldung:In Funktion 'Termin::Termin(Zeit, std::string, unsigned int)':
class.cpp(.text._ZN6TerminC2E4ZeitSsj[_ZN6TerminC5E4ZeitSSj]+0x3c):
Nicht defenierter Verweis auf 'Zeit::operator=(Zeit&)'
collect2: error: ld returned 1 exit status
Process terminated with status 1 (0 minutes(s), 0 second(s))
0 error(s), 0 warning(s) (0 minute (s), 0 second(s))#include <iostream> #include <iomanip> using namespace std; class Datum { private: unsigned int tag; unsigned int monat; unsigned int jahr; public: Datum(unsigned int t, unsigned int m, unsigned int j) { switch(m) { case 1: if(t>31) { cout<<t<<"."<<m<<"."<<j<<" ist ein ungueltiges Datum!"<<endl; tag=1; monat=1;jahr=2000; } else { tag=t; monat=m; jahr=j; } break; case 2: if((j%4==0 && j%100 != 0 )|| j%400 ==0) { if(t > 29) { cout<<t<<"."<<m<<"."<<j<<" ist ein ungueltiges Datum!"<<endl; tag=1; monat=1; jahr = 2000; } else { if(t >28) { cout<<t<<"."<<m<<"."<<j<<" ist ein ungueltiges Datum!"<<endl; tag=1; monat=1; jahr=2000; } } } else { tag=t, monat=m, jahr=j; } break; case 3: if(t > 31) { cout<<t<<"."<<m<<"."<<j<<" ist ein ungueltiges Datum!"<<endl; tag=1; monat=1; jahr=2000; } else { tag=t; monat=m; jahr=j; } break; case 4: if(t > 30) { cout<<t<<"."<<m<<"."<<j<<" ist ein ungueltiges Datum!"<<endl; tag=1; monat=1; jahr=2000; } else { tag=t; monat=m; jahr=j; } break; case 5: if(t > 31) { cout<<t<<"."<<m<<"."<<j<<" ist ein ungueltiges Datum!"<<endl; tag=1; monat=1; jahr=2000; } else { tag=t; monat=m; jahr=j; } break; case 6: if(t > 30) { cout<<t<<"."<<m<<"."<<j<<" ist ein ungueltiges Datum!"<<endl; tag=1; monat=1; jahr=2000; } else { tag=t; monat=m; jahr=j; } break; case 7: if(t > 31) { cout<<t<<"."<<m<<"."<<j<<" ist ein ungueltiges Datum!"<<endl; tag=1; monat=1; jahr=2000; } else { tag=t; monat=m; jahr=j; } break; case 8: if(t > 31) { cout<<t<<"."<<m<<"."<<j<<" ist ein ungueltiges Datum!"<<endl; tag=1; monat=1; jahr=2000; } else { tag=t; monat=m; jahr=j; } break; case 9: if(t > 30) { cout<<t<<"."<<m<<"."<<j<<" ist ein ungueltiges Datum!"<<endl; tag=1; monat=1; jahr=2000; } else { tag=t; monat=m; jahr=j; } break; case 10: if(t > 31) { cout<<t<<"."<<m<<"."<<j<<" ist ein ungueltiges Datum!"<<endl; tag=1; monat=1; jahr=2000; } else { tag=t; monat=m; jahr=j; } break; case 11: if(t > 30) { cout<<t<<"."<<m<<"."<<j<<" ist ein ungueltiges Datum!"<<endl; tag=1; monat=1; jahr=2000; } else { tag=t; monat=m; jahr=j; } break; case 12: if(t > 31) { cout<<t<<"."<<m<<"."<<j<<" ist ein ungueltiges Datum!"<<endl; tag=1; monat=1; jahr=2000; } else { tag=t; monat=m; jahr=j; } break; default: cout<<t<<"."<<m<<"."<<j<<" ist ein ungueltiges Datum!"<<endl; tag=1; monat=1; jahr=2000; break; } return; } Datum() : Datum(1, 1, 2000) //Standardkonstruktor { return; } friend ostream& operator<<(ostream& , const Datum&); Datum& operator+=(unsigned int); friend istream& operator>>(istream&, Datum&); friend bool operator==(const Datum&, const Datum&); Datum& operator=(Datum&); }; ostream& operator<<(ostream& os , const Datum& d) { os << d.tag << ". "; switch(d.monat) { case 1: os <<"Januar "; break; case 2: os <<"Februar "; break; case 3: os <<"Maerz "; break; case 4: os <<"April "; break; case 5: os <<"Mai "; break; case 6: os <<"Juni "; break; case 7: os <<"Juli "; break; case 8: os <<"August "; break; case 9: os <<"September "; break; case 10: os <<"Oktober "; break; case 11: os <<"November "; break; case 12: os <<"Dezember "; break; default: break; } os << d.jahr ; return os; } Datum& Datum::operator+=(unsigned int a) { while (a>0) { switch(monat) { case 1: if(a<=31-tag) {tag += a; a=0;} else {a= a-(31-tag+1); monat+=1; tag=1;} break; case 2: if((jahr%4==0 && jahr%100 != 0)|| jahr % 400 == 0) { if(a<=29-tag) {tag += a; a=0;} else{a= a-(29-tag+1); monat+=1; tag=1;} } else if(jahr%4 != 0) { if(a<=28-tag) {tag += a; a=0;} else {a= a-(28-tag+1); monat+=1; tag=1;} } break; case 3: if(a<=31-tag) {tag += a; a=0;} else {a= a-(31-tag+1); monat+=1; tag=1;} break; case 4: if(a<=30-tag) {tag += a; a=0;} else{a= a-(30-tag+1); monat+=1; tag=1;} break; case 5: if(a<=31-tag) {tag += a; a=0;} else{a= a-(31-tag+1); monat+=1; tag=1;} break; case 6: if(a<=30-tag) {tag += a; a=0;} else{a= a-(30-tag+1); monat+=1; tag=1;} break; case 7: if(a<=31-tag) {tag += a; a=0;} else{a= a-(31-tag+1); monat+=1; tag=1;} break; case 8: if(a<=31-tag) {tag += a; a=0;} else{a= a-(31-tag+1); monat+=1; tag=1;} break; case 9: if(a<=30-tag) {tag += a; a=0;} else{a= a-(30-tag+1); monat+=1; tag=1;} break; case 10: if(a<=31-tag) {tag += a; a=0;} else{a= a-(31-tag+1); monat+=1; tag=1;} break; case 11: if(a<=30-tag) {tag += a; a=0;} else{a= a-(30-tag+1); monat+=1; tag=1;} break; case 12: if(a<=31-tag) {tag += a; a=0;} else{a= a-(31-tag+1); jahr += 1; monat=1; tag=1;} break; default: break; } } return *this; } istream& operator>>(istream& is, Datum& d) { cin>>d.tag>>d.monat>>d.jahr; return is; } bool operator==(const Datum& d, const Datum& e) { if(d.tag == e.tag && d.monat == e.monat && d.jahr == e.jahr) return true; else return false; } Datum& Datum:: operator=(Datum& d) { tag=d.tag; monat=d.monat; jahr=d.jahr; return *this; } class Zeit { private: unsigned int stunde; unsigned int minute; Datum datum; public: Zeit(Datum d, unsigned int s, unsigned int m) { if(s>23 || m>59) { cout<<d<<", "<<s<<":"<<m<<" Uhr ist keine gueltige Zeit!"<<endl; stunde=0; minute=0; } else{stunde = s; minute = m; datum = d;} } Zeit() : Zeit(Datum(), 0, 0) //Standardkonstruktor { return; } Zeit& operator+=(unsigned int); friend ostream& operator<<(ostream& , const Zeit& ); friend bool operator==(const Zeit&, const Zeit&); Zeit& operator=( Zeit&); }; Zeit& Zeit::operator+=(unsigned int a) { while (a>0) { if(stunde == 23) { if(a<= 59-minute) { minute += a; a=0; } else { a = a-(59-minute+1); stunde = 0; minute = 0; datum+=1; } } else { if(a<= 59-minute) { minute += a; a=0; } else { a = a-(59-minute+1); stunde += 1; minute = 0; } } } return *this; } ostream& operator<<(ostream& os , const Zeit& z) { cout<<z.datum<<", "; if(z.stunde<10) cout<<"0"; cout<<z.stunde<<":"; if(z.minute<10) cout<<"0"; cout<<z.minute<<" Uhr"; return os; } bool operator==(const Zeit& x, const Zeit& y) { if(x.datum == y.datum && x.minute == y.minute && x.stunde == y.stunde) return true; else return false; } class Termin { private: Zeit zeit; unsigned int dauer; string beschreibung; public: Termin(Zeit z, string b, unsigned int d) { zeit=z; beschreibung=b; dauer=d; } Termin() : Termin(Zeit(), "leer", 0) { return; } friend ostream& operator<<(ostream& , Termin&); }; ostream& operator<<(ostream& os , Termin& t) { cout<<"Termin: "<<t.beschreibung<<endl; cout<<"Beginn: "<<t.zeit<<endl; t.zeit+=t.dauer; cout<<"Ende: "<<t.zeit<<endl; return os; } int main(void) { Datum d1; Datum d2(03, 12, 2015); cout<<boolalpha; cout<<"Datum d1: "<<d1<<endl; cout<<"Datum d2: "<<d2<<endl<<endl; cout << "Versuche d3 mit Datum 30.02.2016 anzulegen" << endl; Datum d3(30,2,2016); cout << "Datum d3: " << d3 << endl << endl; cout << "Vergleiche d1 mit d2 und d3: " << endl; cout << "d1==d2: " << (d1==d2) << endl; cout << "d1==d3: " << (d1==d3) << endl << endl; cout<< "Setze d1 auf Wert von d2"<<endl; d1 = d2; cout<< "Datum d1: "<< d1 << endl<<endl; cout << "Addiere 100 Tage zu d1" << endl; d1 += 100; cout << "Datum d1: " << d1 << endl; cout << "Addiere 60 Tage zu d2" << endl; d2 += 60; cout << "Datum d2: " << d2 << endl << endl; cout << "Datum im Format \"tt mm jjjj\" eingeben: "; cout.flush(); cin >> d1; cout << "Speichere eingegebenes Datum in d1" << endl; cout << "Datum d1: " << d1 << endl << endl; Zeit z1; cout << "Zeitpunkt z1: " << z1 << endl; Zeit z2(d1,23,30); cout << "Zeitpunkt z2: " << z2 << endl; cout << "Versuche Zeit z3 mit d1 und Zeit 25:10 Uhr anzulegen: " << endl; Zeit z3(d1,25,10); z2 += 100; cout << "Addiere 100 Minuten zu z2: " << z2 << endl << endl; d1 += 1; Zeit z4(d1, 1, 10); cout << "Kollisionstest z1 mit z2: " << (z1==z2) << endl; cout << "Kollisionstest z2 mit z4: " << (z2==z4) << endl << endl; Zeit z5(d2,22,30); cout << "Zeitpunkt z5: " << z5 << endl; z5 += 2000; cout << "Addiere 2000 Minuten zu Zeitpunkt z5: " << z5 << endl << endl; Termin t1(Zeit(Datum(16,2,2016),10,0),"OOP Klausur",90); cout << "Erstelle Termin mit 90 Minuten Dauer: " << endl << t1 << endl; return 0; }Ich weiß ist ein ziemlicher Brocken, vielleicht kann trotzdem wer helfen!

-
Wo ist die Implementierung zu Zeile 364:
Zeit& operator=( Zeit&);
-
Mit etwas Denke hätte man das auch selbst lösen können ;). Der Fehler steht doch schon auf dem Tablett serviert:
Termin::Termin(Zeit, std::string, unsigned int)': class.cpp: Nicht defenierter Verweis auf 'Zeit::operator=(Zeit&)'