Liste mit externen Nutzdaten



  • Ich habe eine Liste mit externen Nutzdaten. Auf die Nutzdaten zweige ich jeweils mit einem void-Pointer, das die ND unterschiedlich sein können. Ich habe nun gehöhrt, dass das arbeiten mit Listen, die einen void-Pointer enthalten unschön sei. Nun bin ich auf der Suche nach einem Beispiel. Hat jemand einen Link oder eigenen Code?
    Bisher sehen die Definition wie folgt aus:

    class Cpointer // entählt drei Pointer
    {
    	friend class Cliste;
    private:
    	Cpointer *pNext; // nächstes Element in der Liste
    	Cpointer *pBefor; // vorheriges Element in der Liste
    public:
    	void *pDaten; // zeigt auf ein Nutzdatenobjekt
    	Cpointer(void);
    }; 
    
    class Cliste // Doppeltverkettete Liste, ND sind unbekannt
    {
    	friend class CKartei_Verwaltung;
    private:
    	Cpointer *pAnker; // Anfang der Liste
    	Cpointer *pEnde; // Ende der Liste
    	Cpointer *pHilfs; // Beinhaltet die aktuelle Position in der Liste
    public:
    	Cliste(void);
    	~Cliste(void);
    	Cpointer *suchen(bool reset = false);
    	bool einfuegen(Cpointer *);
    	void add_loeschen(Cpointer *, bool mit_pointer = false);
    	void all_loeschen(bool mit_CND = false);
    };
    
    class CND // eine Nutzdatenklasse als Beispiel
    {
    	friend class CKartei_Verwaltung;
    public:
    	CND(char *Frage, char *Antwort, int Punkte); // Kopier - Konstruktor
    private:
    	char FRAGE[MAX_LENGTH_NUTZDATEN];
    	char ANTWORT[MAX_LENGTH_NUTZDATEN];
    	int  PUNKTE;
    };
    
    class CKartei_Verwaltung//Die "Endklasse" für den Benutzer
    {
    public:
    	bool nextElement(void);
    	bool read_file(char *Filename, bool checkfile = false); // liest eine Datei aus
    	bool check_file(void); // Prüft die Syntax des Files
    	//usw.
    	//usw.
    private:
    	Cliste kurze_Liste; // zum Abspeichern und ändern der Daten
    	Cliste lange_Liste; // zum Arbeiten nach Aussen
    	char Filename[50]; // Namen der aktuellen Datei fürs abspeichern
    };
    

    Ich habe also die Klassen Cpointer und Cliste die universell einsetzbar sind und die eigentliche Liste darstellen. Mithilfe des void-Pointer in der Klasse Cpointer zeige ich dann auf ein Objekt von CND. Die gesammte Verwaltung von Cliste übernimmt CKartei_Verwaltung. Eine Zugriff auf CND sieht dann wie folgt aus:

    ((CND*)pTemp->pDaten)->FRAGE
    

    Das kann es wirklich nicht sein....

    Hat mir bitte jemand einen Link oder Code?

    Gruss Thomas



  • Warum nimmst du nicht eine public class cListEntry von der du sämtliche Klassen, die in deiner Liste stehen ableitest? Dann kannst du einfach eine Liste von cListEntry's machen, da ja alle abgeleiteten Klassen auch cListEntry's sind..



  • Dieses cListEntry kenne ich nicht. Werds mir mal anschauen.
    Danke für den Hinweis


Anmelden zum Antworten