STL:List sortieren



  • Hi,

    irgenwie will die Funktion zum sortieren meiner Liste nicht so ganz klappen:

    class ObjectManager
    {
    
    private:
    			list <Object> objectliste;
    
    public:
    
    		ObjectManager();
    		~ObjectManager();
    		void read_from_textfile();
    		void kennzahlen_ausgeben() const;
    		void objecte_ausgeben() const;
    		bool compareProfit(const Object& left, const Object& right);
    		void sortieren();
    
    };
    
    bool ObjectManager::compareProfit(const Object& left, const Object& right)
    {
    	return left.get_profit() < right.get_profit();
    }
    
    void ObjectManager::sortieren()
    {
    	objectliste.sort(compareProfit);
    	//objectliste.sort();
    }
    

    Fehlermeldung:

    error C3867: 'ObjectManager::compareProfit': function call missing argument list; use '&ObjectManager::compareProfit' to create a pointer to member
    error C2660: 'std::list<_Ty>::sort' : function does not take 1 arguments
    

    Könnte mir evt. eine weiterhelfen?



  • -----v
    static bool compareProfit(const Object& left, const Object& right);

    ist dir auch klar, wieso?

    bb



  • Danke für die Info.
    Es funktioniert nun, aber warum weiß ich nicht genau.
    Ich weiß nur das dieses Static dafür sorgen soll, dass nur eine Instanz erzeugt wird.

    Du bist aber sicher so freundlich und erklärst es mir.



  • Wenn es ihm klar wäre, hätte er vermutlich nicht gefragt 🙂



  • hustbaer schrieb:

    Wenn es ihm klar wäre, hätte er vermutlich nicht gefragt 🙂

    Hmm... Naja - manchmal sieht man den Wald vor lauter Bäumen nicht - hätt ja auch hier zutreffen können...

    Krikus schrieb:

    Du bist aber sicher so freundlich und erklärst es mir.

    ich versuch es mal... ^^

    class ObjectManager
    {
      void a();
      // a(ObjectManager* this)
      void b(int);
      // b(ObjectManager* this, int)
      static void c();
      // c()
      static void d(int);
      // d()
    };
    
    void a();
    // a()
    void b(int)
    // b(int)
    

    Als Kommentare hab ich dir mal die Signaturen mit hingeschrieben - wie du siehst, haben member-Funktionen noch einen "unsichtbaren nullten" parameter:
    den Zeiger, den du als this kennst.
    Das ist so, weil die Fkt ja für jede Instanz gleich ist, eben nur mit anderen Adressen (in gleicher Art und Weise) arbeitet.

    Also muss man nachher irgendwann wissen, welche Instanz denn jetzt eigentlich gemeint ist - das wird eben mit dem this-zeiger gelöst.

    Du hast also versucht eine Member-Fkt zu übergeben - deren Signatur war aber (deshalb) eben falsch.

    Ist vll nicht die beste Erklärung, aber ich hoffe, sie reicht ^^

    bb


Anmelden zum Antworten