Vector mit eigener Funktion sortieren



  • Hallo ich habe 2 Klassen . ich werde sie klasse A und klasse B nennen, da sie ziemlich komlex isnd. Also Klasse A und KLasse B. in der Klasse b gibt es einen vector mit einem eigenen typ. nun möchte ich diesen vecotr sorieeren lassen. dazu verwende ich die sort funktion . als sortierung fskuntion habe ich mir eine eigene funktion geschrieben (sortierevector) das funktioniert auch gut . allerding geht es nur wenn diese funktion nicht in der klasse A implemetiert ist sondern in der quellcodedatei von klasse b.

    ich möche nun die sortier - funktion in der klasse a implementieren und in der klasse b verwenden. klasse b hat einen zeiger auf ein objekt der klasse a.

    kannmir jemand dabei halfen ?
    vielen dank



  • dercooleauswandere schrieb:

    ich möche nun die sortier - funktion in der klasse a implementieren

    Zeig mal das Stück Quellcode, bitte...

    Warum willst du eigentlich die Sortierfunktion für Klasse A in Klasse B implementieren? Hat die dort was zu suchen?
    Sollte sie evtl lieber eine freie Funktion sein?
    etc.

    Evtl. sagst du auch einfach mal bissl mehr zu deinen Klassen A und B und dem Vektor - das würde es zumindest nicht schwerer machen, deinen Fehler zu finden und evtl. auch noch rechtzeitig einen Designfehler vermeiden?!

    bb



  • naja klasse ist sowas wie eine basisklasse. und ich willdeshalb die funktion dort implemtieren. als eine freie funktion geht es ja aber wie kann man das in einer klasse machen



  • Dafür, dass du Hilfe willst, bist du aber ziemlich wortkarg...

    also B erbt von A!?

    also so was in etwa:

    class A
    {
    protected:
      typedef std::vector<int> ContainerX;
      ContainerX X;
    
      static bool ContainerX_sort(int lhs, int rhs) {return lhs < rhs;}
    };
    
    class B : A
    {
      void foo()
      {
        std::sort(X.begin(), X.end(), ContainerX_sort);
      }
    };
    


  • Ja du hast ja recht.
    Ich will nicht all zuviel verwirrung stiften. meine klassen sind nicht abgeleitet sondern klasse b besitzt einen instanz der klasse a



  • ich habe meinen fehler gefunden . bei mir in der klass e hat das static vor der funktion gefehlt- nun geht es. warum muss diese funktion static gedklariert sein



  • weil bei nicht statischen fkt ein zeiger für die instanz (der dir unter this bekannt sein sollte) also 1. argument übergeben...
    also:

    struct test
    {
      void foo();
    };
    
    //-----------
    
    struct test {};
    void foo(test* this)
    {
      ;
    }
    

    Wäre das gleiche, wenn es gehen würde ^^
    Gehört aber eigtl zu den Grundlagen...

    bb



  • dercooleauswandere schrieb:

    ...bei mir in der klass e hat das static vor der funktion gefehlt...

    Das heißt, Du hast aus Deiner Memberfunktion eine freie Funktion gemacht.

    Ist eine gute (und IMHO in diesem Fall die richtige) Sache ... aber warum dann das Ganze?
    Damit:

    als eine freie funktion geht es ja aber wie kann man das in einer klasse machen

    Hat das jedenfalls nicht mehr viel zu tun.

    BTW: Grassiert gerade wieder das "Objektivierungsfieber" oder kommt nur mir das so vor? Bin mal gespannt, wann die ersten Equal-, Inc-, Minus- und DeRef-Klassen auftauchen, weil ==, ++, - und * als als "schlecht modelliert" gelten...

    Gruß,

    Simon2.



  • Simon2 schrieb:

    BTW: Grassiert gerade wieder das "Objektivierungsfieber" oder kommt nur mir das so vor?

    Nein, es geht momentan wirklich wieder herum. 😉
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-241549-and-start-is-20.html
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-241725-and-start-is-0.html


Anmelden zum Antworten