operator== überladen = Problem



  • Morgen zusammen!

    Ich hab mir ne Klasse TJob geschrieben und in dieser Klasse wollte ich dann den
    operator== überladen

    Hier mal die deklaration der Klasse

    class TJob
    {
       private:
       int m_etage;
       int m_richtung;
       bool m_vip;
    
       public:
       TJob();
       TJob(int pEtage, int pRichtung);
       TJob(int pEtage, int pRichtung, bool pVip);
       ~TJob();
    
       //Copy-Ctor und Operatoren
       TJob(const TJob& pJob);
       TJob& operator= (const TJob& pJob);
       //Hier mein Problemfall
       bool operator== (const TJob& pJob) const;
    
       //und noch getter/setter -methoden
    };
    

    und hier die CPP

    bool TJob::operator== (const TJob& pJob) const
    {
       if(this->m_etage == pJob.m_etage &&
          this->m_richtung == pJob.m_richtung &&
          this->m_vip == pJob.m_vip)
          return true;
       else
          return false;
    }
    

    Jetzt mein Problem konkretisiert:

    Ich programmiere eine Fahrstuhl-Simulation. Daher sammle ich die Jobs alle in einem vector<TJob*>

    In einer Schleife frage ich dann ab, ob mein neuseter Job nicht bereits vorhanden ist, und daher hatte ich mir halt den op== überladen. Allerdings sagt er mir IMMER, das die Jobs ungleich sind, obwohl dich jobs exakt gleich sind. Habs mir im auch im Debugger angesehn.

    //Ist der Job schon vorhanden?
    for(unsigned int i = m_vipjob_count; i<m_job.size(); i++)
    {
       //m_job ist mein vector<TJob*>, job ist der neueste Job
       if(job == m_job[i])
         	return; //wenn jobs gleich, beende methode
    }
    

    Könnt ihr mir sagen was ich da falsch gemacht hab?? 😕

    Ich hoffe ich hab mich verständlich ausgedrückt 🙂



  • was mir nur grad so auffällt: du beginnst deine schleife nicht bei null, sondern beim jobcount (der wohl die anzahl an jpbs wiedergeben soll). der wird aber wahrscheinlich genausogroß sein wie vector.size(). also hast du mgl-weise keinen schleifendurchlauf. und kann es sein, dass du den TJob aus dem vector erst dereferenzieren musst?



  • Prüfe den op== doch einfach mal mit 2 Objekten aus. (müsste gehen sieht
    nix falsch aus).
    Wenn das klappt, nimm doch std::find oder fang mal bei 0 in der schleife an
    (wie schon gesagt)

    if(find(m_job.begin(),m_job.end(),job) == m_job.end())
       return;
    

    p.S.

    Du kannst auch schreiben:

    return (this->m_etage == pJob.m_etage && 
          this->m_richtung == pJob.m_richtung && 
          this->m_vip == pJob.m_vip)
    


  • gibt size() unsigned int zurück????? ich bin mir grad net sicher, wenn nicht änder auf jeden Fall mal das unsigned int in deiner Schleife!



  • Dereferenzierung, das wars 😃

    aber das mit dem find() ist auch ne gute sache, erspart mir ja die Schleife 🙂

    Also bei mir im BCB sagt er mit immer "Warnung: Vergleich von signed und unsigned werten, daher das unsigned.

    Danke 🙂


Anmelden zum Antworten