operator== überladen = Problem
-
Morgen zusammen!
Ich hab mir ne Klasse TJob geschrieben und in dieser Klasse wollte ich dann den
operator== überladenHier 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