list<Klasse> an Konstruktor übergeben.



  • Hallo Leute,

    ich möchte in den Konstruktor einer KlasseA eine List einer KlasseB übergeben. Geht das?

    #include "klasseB.h"
    #include <list>
    
    #ifndef _KLASSEA_H
    #define _KLASSEA_H
    
    class KlasseA{
    	private:
    		static unsigned int ID;
    		unsigned int a,b,c;
    	public:
    		KlasseA(list<KlasseB> Liste_Klasse_B ); // Fehler passiert hier
    		~KlasseA();
    
    };
    #endif
    

    Der Compiler sagt mir: error: expected ')' bevoer '<' token.

    Wäre für eine kurze Hilfestellung dankbar.



  • benutze einfach std::list<...>



  • Oder

    using namespace std;
    


  • theta schrieb:

    benutze einfach std::list<...>

    Balduin schrieb:

    Oder

    using namespace std;
    

    Oh man wie peinlich.. 🙄

    Danke!



    • Nein, benutze using namespace nicht in der Headerdatei. Tu das niemals, denn so machst du den ganzen Namensraum-Inhalt in sämtlichen inkludierenden Dateien irreversibel bekannt, was dem Gliederungskonzept der Namensräume zuwider läuft.
    • Mit std::list<KlasseB> als Parameter hast du zudem eine sinnlose Kopie des gesamten Containers. Warum nicht eine Referenz auf const ( const std::list<KlasseB>& )?
    • Ich würde keinen Destruktor definieren, falls der nichts tut. Dann reicht der compilergenerierte. Falls er doch etwas tut, müsstest du auch an eine Implementierung von Kopierkonstruktor und Zuweisungsoperator denken (Regel der Grossen Drei).
    • Header-Guards solltest du um den ganzen Code, also inklusive Include-Direktiven, herum spannen.
    • Bezeichner wie _KLASSEA_H , die mit Unterstrichen und Grossbuchstaben beginnen oder die zwei aufeinanderfolgende Unterstriche enthalten, sind für Compiler und Implementierung reserviert. Nimm doch einfach KLASSEA_H .


  • Nexus schrieb:

    • Nein, benutze using namespace nicht in der Headerdatei. Tu das niemals, denn so machst du den ganzen Namensraum-Inhalt in sämtlichen inkludierenden Dateien irreversibel bekannt, was dem Gliederungskonzept der Namensräume zuwider läuft.
    • Mit std::list<KlasseB> als Parameter hast du zudem eine sinnlose Kopie des gesamten Containers. Warum nicht eine Referenz auf const ( const std::list<KlasseB>& )?
    • Ich würde keinen Destruktor definieren, falls der nichts tut. Dann reicht der compilergenerierte. Falls er doch etwas tut, müsstest du auch an eine Implementierung von Kopierkonstruktor und Zuweisungsoperator denken (Regel der Grossen Drei).
    • Header-Guards solltest du um den ganzen Code, also inklusive Include-Direktiven, herum spannen.
    • Bezeichner wie _KLASSEA_H , die mit Unterstrichen und Grossbuchstaben beginnen oder die zwei aufeinanderfolgende Unterstriche enthalten, sind für Compiler und Implementierung reserviert. Nimm doch einfach KLASSEA_H .

    Das sind gute Tips. Für C++ Anfänger wie mich gerade richtig. Danke dir!


Anmelden zum Antworten