Announcement

Collapse
No announcement yet.

operator == überladen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • operator == überladen

    Hallo Leute,

    offensichtlich bin ich zu doof einen Operator zu überladen. Deshalb: Hilfe!

    Ich habe es so versucht:<BR>
    Header: <BR>
    <PRE>
    struct KM // Kalibriermittel
    {
    int Id;
    KM();
    KM(KM *ckm);
    ~KM();
    bool operator== (const KM* km) const;
    };
    </PRE>
    CPP: <BR>
    <PRE>
    bool KM:perator== (const KM* km) const
    {
    if (this->Id == km->Id)
    return true;
    else
    return false;
    }
    </PRE>

    Kompiliert wird's ohne Probleme, aber der Code wird niemals aufgerufen. Er vergleicht weiterhin die Werte der Zeiger. Wo liegt der Hase im Pfeffer?

    Schon mal danke,

    Jochen

  • #2
    Weiß nicht wie du vergleichst, bekomme bei

    <pre>
    KM mykm1;
    KM mykm2;
    mykm1.Id=3000;
    mykm2.Id=4000;
    if(mykm1==mykm2)
    {
    ShowMessage("gleich");
    }

    </pre>

    [C++ Fehler] Unit1.cpp(37): E2093 'operator==' ist im Typ 'KM' für Argumente desselben Typs nicht implementier
    Christian

    Comment


    • #3
      Weiß nicht wie du vergleichst, bekomme bei

      <pre>
      KM mykm1;
      KM mykm2;
      mykm1.Id=3000;
      mykm2.Id=4000;
      if(mykm1==mykm2)
      {
      ShowMessage("gleich");
      } </pre>
      [C++ Fehler] Unit1.cpp(37): E2093 'operator==' ist im Typ 'KM' für Argumente desselben Typs nicht implementier
      Christian

      Comment


      • #4
        Hi Christian,

        ich erzeuge die Objekte mit new und vergleiche mit Zeiger1 == Zeiger2. Aber ich habe mittlerweile auch noch mal herumprobiert und bekomme diese Fehlermeldung ebenfalls wenn ich *Zeiger1 == *Zeiger2 vergleiche. Weißt Du eine Lösung?

        Grüße Jochen

        P.S. Hab' mich tierisch gefreut, als ich heute auf Deiner Webseite war und diese nun farbenblind-freundlich ist. ;

        Comment


        • #5
          Bastle auch gerade dran.

          Bei mir geht es erstmal nur den Konstruktor und Destruktor auch da sind:

          <pre>
          KM::KM()
          {

          }

          KM::~KM()
          {
          //TODO: Hier Ihren Quelltext einfügen
          }

          </pre>

          Danke :-
          Christian

          Comment


          • #6
            Hi Jochen,<br>
            ich würde es mal mit <tt>bool operator== (const KM& km) const</tt> versuchen -- also Referenz statt Zeiger.
            <br>Und wenn wir schon dabei sind: Soll <tt>KM(KM *ckm)</tt> der Copy-Konstruktor sein? Dann sollte er doch auch eine konstante Referenz als Parameter haben?
            <br>Uli

            Comment


            • #7
              <pre>
              KM *mykm1=new KM();
              KM *mykm2=new KM();
              mykm1->Id=3000;
              mykm2->Id=3000;
              if(mykm1==mykm2)
              {
              ShowMessage("gleich");
              }

              </pre>

              bringt ni
              Christian

              Comment


              • #8
                KM mykm1;
                KM mykm2;
                mykm1.Id=3000;
                mykm2.Id=4000;

                if(mykm1 == <font color=red><b>&</b></font>mykm2)
                {
                ShowMessage("gleich");
                }
                else
                {
                ShowMessage("ungleich");

                Comment


                • #9
                  Meine Antwort bezog sich auf die erste Antwort von C.M. zu einem Zeipunkt, wo noch keine weiteren Hinweise gegen wurden. Die Referenz als Übergabe verhindert auch den beschriebenen Fehler.

                  Gruß

                  Comment


                  • #10
                    <i>Die Referenz als Übergabe verhindert auch den beschriebenen Fehler.</i><br>
                    ... und ist IM(NS)HO deutlich besserer Stil. :-

                    Comment


                    • #11
                      Das Problem ist hier m.E. nicht Referenz o.a., sondern das offenbar die überladene == Funktion in einem Vergleich gar nicht aufgerufen wird
                      Christian

                      Comment


                      • #12
                        Soweit ich das alles noch weiß, wird für *Zeiger1 == *Zeiger2 die Variante
                        mit Referenz- (oder Wert-) Parameter aufgerufen. Jochens Zeiger-Variante würde für *Zeiger1 == Zeiger2
                        aufgerufen werden (nur eine Derefenzierung - aua!). Für Zeiger1 == Zeiger2
                        wird <b>immer</b> ein Zeigervergleich durchgeführt und <b>nie</b>
                        ein benutzerdefinierter

                        Comment


                        • #13
                          Hallo Leute,

                          erst Mal vielen Dank für die Anworten.

                          Nur um es gesagt zu haben, die Objekte vom Typ KM sind ausnahmlos dynamisch erzeugt (deswegen funktioniert der Kopier-Konstruktor auch so wie er ist, auch wenn's schlechter Stil ist...).

                          Ich habe es aber bisher auch nicht mit der Übergabe als Referenz hinbekommen, aber auf Grund von ingUR's Posting hab' ich dann wohl den Vergleich falsch gemacht. <BR>
                          Ich werde das also nochmal mit der Referenz versuchen.

                          Was ich wollte war eine überladene Version der Funktion Zeiger1 == Zeiger2, die nicht die Zeigerwerte als solches vergleicht, sondern den Inhalt der Zeiger. Das scheint sich so aber nicht überladen zu lassen. Gott sei Dank nicht, weil sonst ja auch der Vergleich gegen NULL nicht mehr funktioniert. (Ursache: Grober Denkfehler!)

                          @Ulrich: Und wenn ich dann dabei bin, werde ich auch den Kopier-Konstruktor korrigieren.

                          Erst mal vielen Dank an alle. Ich werd' das Ergebnis (und/oder weitere Fragen) dann morgen posten.

                          Grüße

                          Joche

                          Comment


                          • #14
                            ich glaube auch nicht dass es bei dynamisch erzeugten Objekten funktioniert. Ich wärde das problem ganz einfach mit einer Methode bool equals(KM* km) lösen.

                            Sebastia

                            Comment


                            • #15
                              Hallo, Chr.M.,

                              die von J.R. geschriebene Funktion wird aufgerufen und abgearbeitet (Debug-Test), wobei ich die von Ihnen vorgestellte Vergleichsabfrage mit der entsprechenden Erweiterung benutzt habe.

                              Gruß,
                              Uw

                              Comment

                              Working...
                              X