wo kommt der pointer bei sort her?



  • hallo zusammen,

    ich habe eine sort funktion, welche die nachrichten in einer queue nach der delivery zeit sortieren soll:

    void
    Queue::sortByTime() {
    
      std::sort(queue.begin(), queue.end(), ComparatorLessAs );
    }
    

    Die queue kapselt einen vector (hier queue), und der ComparatorLessAs ist definiert als:

    bool
            Queue::ComparatorLessAs(PeerMessage * a, PeerMessage * b) {
    
                if(a == NULL) throw NullPointerException("ComparatorLessAs - the first argument given is NULL");
                if(b == NULL) throw NullPointerException("ComparatorLessAs - the second argument given is NULL");
                return (a->getLogicalDeliveryTime() < b->getLogicalDeliveryTime());
            }
    

    Der Compiler meldet aber:

    Queue.cc:78: error: argument of type ‘bool (Queue::)(PeerMessage*, PeerMessage*)’ does not match ‘bool (Queue::*)(PeerMessage*, PeerMessage*)’
    

    Woher kommt Queue* ????? Jemand einen Tipp? Danke!



  • Mach die Vergleichsfunktion zu einer statischen Memberfunktion oder zu einer globalen Funktion. Du kannst keine nicht-statischen Memberfunktionen als Sortierprädikat übergeben, da du dafür einen this -Zeiger bräuchtest.

    Nullzeiger auf diese Weise zu prüfen ist fragwürdige Praxis, das verbirgt nur Logikfehler. Entweder assert oder einen vernünftigen Debugger, der bei der Dereferenzierung von Nullzeigern automatisch das Programm anhält...

    Übrigens: "Kleiner als" heisst "less than" und nicht "less as" 😉



  • hallo nexus,

    das ist ja doppelt peinlich, vor allem, da ich es in der doku richtig geschrieben haben. 😞

    vielen dank für deine hilfe, nun tuts!!!


Anmelden zum Antworten