Klasse mit structur Liste



  • Hallo,
    ich steh gerade irgendwie auf schlauch (vllt weil freitag nachmittag ist).

    Ich will folgende Klasse realisieren:

    Eine Klasse enthält unteranderm eine structur und mehrere Funktionen.
    Außerdem soll es eine verkette Liste der Struktur geben.

    Nun will ich von den Structurelementen eine liste erstellen vom typ list<package>.

    Also wie folgt:

    Die Methode addtoList bekommt Daten übergeben, diese schreibt die daten in ein Struct element soweit so gut. Nun soll das element eingereiht werden. und zwar so das ich es nachher noch mit eienr anderen Methode auslesen kann.
    Wie bzw. wo muß ich jetzt die liste deklarieren.

    Biher hab ich das im header

    class modul
    {
    
    public:
    
    	void addtolist(int LIID, string prot, short data, short PhyAdr);
    
    	//constructor
    	modul::modul(){
    
    	}
    
    	modul::~modul(){
    
    	}
    
    	typedef struct sctPackage{
    			int LIID; 
    			string prot; 
    			short data; 
    			short PhyAdr; 
    			};
    
    	list<sctPackage> liste;
    
    };
    

    und folgedes in der cpp

    void addtolist(int LIID, string prot, short data, short PhyAdr){
    
    	//create new package from package struct
    	modul::sctPackage elm_packet;
    	// fill Element with data
    	elm_packet.LIID = LIID;
    	elm_packet.prot = prot;
    	elm_packet.data = data;
    	elm_packet.PhyAdr = PhyAdr;
    
    	// put element into an list
    
    };
    

    soweit so gut nur wie bekomm ihc das jetzt eingereiht??

    Mein problem ist geanuer gesagt: Wo muß ich die Liste deklarieren, das ich in den Funktionen auf die Listen funktionen zugreifen kann (pushfront() ect.)

    Also so eine art globale Liste für die klasse



  • das hier ist unnötig:

    //constructor
        modul::modul(){
    
        }
    
        modul::~modul(){
    
        }
    

    wenn du das weglässt, macht dein compiler genau das gleiche für dich. der kommentar ist ein wenig sinnlos, oder? 😉

    typedef struct sctPackage{
                int LIID;
                string prot;
                short data;
                short PhyAdr;
                };
    

    das typedef ist falsch. nicht mal in C hat man das so gemacht.

    die *.cpp:

    //void addtolist(int LIID, string prot, short data, short PhyAdr){
    void modul::addtolist(int LIID, string prot, short data, short PhyAdr){
    
    //    modul::sctPackage elm_packet;
        sctPackage elm_packet;
    
        // fill Element with data
        elm_packet.LIID = LIID;
        elm_packet.prot = prot;
        elm_packet.data = data;
        elm_packet.PhyAdr = PhyAdr;
    
        // put element into an list
        liste.push_back(elm_packet); //so
    
    };
    

    in C++ nimmt man üblicherweise konstruktoren für die 4 zeilen in addtolist.
    elm_packet und sctPackage sind btw komische bezeichner.
    ich nehm statt elm_packet immer to_add oder so - und statt sctPackage würde sich package bzw package_t anbieten 😉
    oder haben die prexife irgend nen tieferen sinn?

    bb



  • abgesehn davon das du mit nicht bei meinem Problem geholfen hast

    Ja haben sie sct für struct und elm für element.

    Die constructoren sind noch leer ja daher im moment echt überflüsig aber auch nicht wirklich störend.

    in C++ nimmt man üblicherweise konstruktoren für die 4 zeilen in addtolist.

    Womit die konstruktoren also doch ihre berechtigung hätten.
    Außerdem soll das einbinden ja nicht bei erstellen des Objektes der Klasse geschehen, sondern wenn daten an die klassenfunktion übergeben werde.

    Aber zurück zum thema wo muß jetzt die Liste definiert werden bzw. wie mach ich sie für mehrere funktionen verfügbar??



  • free118 schrieb:

    Aber zurück zum thema wo muß jetzt die Liste definiert werden bzw. wie mach ich sie für mehrere funktionen verfügbar??

    Nun sei doch nicht gleich angepi**t, weil unskilled Dir ein paar sinnvolle Tipps gegeben hat. Woher soll man wissen, dass Du weißt, dass Du hier unnötigen Code postest - warum auch immer -, wenn Du es doch weißt, dass er unnötig ist... 😉

    Unskilled hat Dir außerdem Deine Frage beantwortet:

    //modul.h:
    //...
    class modul
    {
    //...
    private:
       std::list<sctPackage> liste; //<-- <--- <----
    };
    
    //modul.cpp:
    //...
    void modul::addtolist(int LIID, string prot, short data, short PhyAdr)
    {
        sctPackage elm_packet;
    
        // fill Element with data
        elm_packet.LIID = LIID;
        elm_packet.prot = prot;
        elm_packet.data = data;
        elm_packet.PhyAdr = PhyAdr;
    
        // put element into an list
        liste.push_back(elm_packet); //<-- <--- <----     
    };
    


  • haste nach der hälfte aufgehört zu lesen?



  • So wie du sie definiert hast ist die list als Membervariable für alle Methoden der Klasse sichtbar.



  • und:
    "Ja haben sie sct für struct und elm für element."
    sinnlos, aber ok...

    "Womit die konstruktoren also doch ihre berechtigung hätten."
    Haste auch nicht wirklich gelesen, oder?
    Ich rede von nem CTor für dein package nicht für modul.

    "Außerdem soll das einbinden ja nicht bei erstellen des Objektes der Klasse geschehen, sondern wenn daten an die klassenfunktion übergeben werde. " 😕



  • ich glaub ihm ist nicht ganz klar dass ein struct das gleiche ist wie eine Klasse (mit Ausnahme des default-Zugriffsrechts)


Anmelden zum Antworten