Überladene Member-Funktion ???



  • Hallo Leute,

    ich habe für mein Project vor mit einer einfachverketteten Liste zu arbeiten.
    soweit so gut doch schon bei der ersten Funktion schießt mich MFC ab.
    Ich hab folgende Funktion angelegt:

    void einfuegen_am_anfang(int datum, struct list * liste);
    

    soweit so gut. Er legt auch direkt den Funktionsrumpf an den dann wie folgt aussieht:

    void CVklDlg::einfuegen_am_anfang(int datum,  struct list* liste)
    

    anschließend hab ich die Funktion mit dem entsprechenden Befehlen gefüllt.
    Doch wenn ich das nun kompiliere sagt mir VC++ folgendes

    error C2511: 'einfuegen_am_anfang' : Überladene Member-Funktion 'void (int,struct CVklDlg::list *)' nicht in 'CVklDlg' gefunden
    d:\vkl\vkldlg.h(14) : Siehe Deklaration von 'CVklDlg'

    Hat jemand ne Idee wie ich die Funktion zum rennen bekomme. 😕



  • Kann es sein, das

    void einfuegen_am_anfang(int datum, struct list * liste);
    

    nicht in

    class CVklDlg : public .....
    {
        void einfuegen_am_anfang(int datum, struct list * liste);
    }
    

    steht 🙄



  • @ByteSlider:
    leider steht es doch drin:

    class CVklDlg : public CDialog
    {
    public:
        void einfuegen_am_anfang(int datum, struct list * liste);
    

    daran hab ich auch schon gedacht aber trotzdem danke.



  • @TheShadow:
    Das muß aber so was in der Art sein 🙄
    Wenn ich das bei mir so einfüge, bigt es keine
    Übersetzungsfehler 😕



  • @ByteSlider
    Ich hab mal etwas rumgespielt und das Public von

    public:
        void einfuegen_am_ende(int datum, struct list *liste);
        void einfuegen_am_anfang(int datum, struct list *liste);
        int error;
        struct item
        {
            struct item *netx;
            int daten;
        };
    
        struct list
        {
            struct item *start;
            struct item *end;
        };
        int erzeuge_Liste();
    

    auf folgendes umgestellt:

    class CVklDlg : public CDialog
    {
    public:
    
        int error;
        struct item
        {
            struct item *netx;
            int daten;
        };
    
        struct list
        {
            struct item *start;
            struct item *end;
        };
        int erzeuge_Liste();
        void einfuegen_am_ende(int datum, struct list *liste);
        void einfuegen_am_anfang(int datum, struct list *liste);
    

    im nachhinein ist es auch logisch das erst die structuren definiert sein müssen aber VC++ sett jedesmal wenn ich ne neue Funktion generiere diese ganz oben ins public und sobald dort dann eine der Strukturen drin steht bekomm ich den Fehler.

    Nach ne Frage:
    Folgende Definition läuft auf einen Fehler warum ?

    void CVklDlg::einfuegen_am_anfang(int datum,  list *liste)
    {
        struct liste *neues_element = malloc(sizeof(item));
    
    }
    

    der Kompiler bring folgende Fehlermeldung:

    error C2440: 'initializing' : 'void *' kann nicht in 'struct CVklDlg::einfuegen_am_anfang::liste ' konvertiert werden
    Konvertierung von 'void
    ' in Zeiger auf nicht-'void' erfordert eine explizite Typumwandlung

    Also so wie ich das eigentlich wollte ist das ich die Nutzdaten und die Listenstruktur übergebe und in der funktion mir ein dynamisches Objekt der Struktur anlege mit dem ich dann die ´Nutzdaten in die struktur hänge. Was will VC++ da mit void ?



  • Hi,

    ich hatte die Funktionen ohne der Struktur angelegt.
    da hat er ebenfalls nicht gemeckert 😮
    Zur zweiten Frage: malloc gibt einen void-pointer zurück und der
    compiler meckert
    weil die typen nicht übereinstimmen. Du mußt den void-point auf die Struktur casten :p

    struct liste *neues_element = (struct liste *)malloc(sizeof(item));
    

    Du soltes aber lieber "new" nehmen, da sonst Probleme auftreten können(werden) 😃

    [ Dieser Beitrag wurde am 05.08.2002 um 16:07 Uhr von ByteSlider editiert. ]



  • @ByteSlider
    jetzt wo du es sachst wirds mir auch klar wie Bohnensuppe 😃 😃 😃
    Ich wurschtel mich im Augenblick durch einen Quellcode der mal in einer Comandlineanwendung lief und eine verkettete Liste (einfach) erzeugen soll. Leider kann ich den nicht ganz eins zu eins ins MFC übernehmen da das Tut sau mißerabel ist.

    Kennt jemand ein gutes Tut für verkettete Listen am besten in C++ ?



  • Schade,
    für pointer-listen gibt es sonst auch ne schöne classe:
    CPtrList



  • @ByteSlider

    Ich wollte mir eigentlich eine auf meine bedürfnisse zugeschnittene Klasse schreiben.

    @ALL
    Wenn jemand gutes Material zu verketteten Listen und Suchalgorithmen kenn herdamit. 🙄 🙄 🙄


Anmelden zum Antworten