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&)'
    

Anmelden zum Antworten