Frage zu Klassen



  • Hallo!
    Ich bin nicht sonderlich gut in C++. Habe Folgenden Code:

    #include <iostream>
    
    using namespace std;
    
    class AClass{
        public:
            AClass(int);
        private:
            int a;
    };
    
    AClass::AClass(int eing)
    {a=eing;}
    
    class BClass{
        public:
            AClass A;
            BClass(void);
    };
    
    BClass::BClass()
    {
     //hier fehlt was
    }
    int main()
    {
    
        return 0;
    }
    

    Was muss ich nun bei BClass::BClass() reinschreiben damit mein Programm funktioniert. Der Compiler gibt aus: "no matching function for call to `AClass::AClass()'"

    Wäre froh wenn mir schnell geholfen wird!



  • Du kannst (bzw. musst) dafür die Initialisierungsliste des Konstruktors verwenden.

    // AClass - Konstruktor
    AClass::AClass(int eing)
    : a(eing) // Initialisierungsliste, um Member zu initialisieren
    {
    
    }
    
    // BClass - Konstruktor
    BClass::BClass()
    : A(3) // Konstruktor von A aufrufen (beispielsweise mit Argument 3)
    {
    
    }
    


  • Danke, hätt ich auch selbst drauf kommen können...



  • Ich bin zwar auch nicht der bringer in C++ aber ich hoffe ich kann die helfen ^^

    #include <iostream>
    
    using namespace std;
    
    class AClass{
            int a;
        public:      //das privat kann man sich sparen den alles 
                     //in einer Klasse ist bis Public: Privat
            AClass(int eing); // da muss das eing rein
            AClass();         // Einfacher Kunstruktor
    
    };
    AClass::AClass()
    {};
    AClass::AClass(int eing):
                   a(eing)
    {}
    
    class BClass{
        public:
            AClass A;
            BClass();   //wenn das ein einfacher von Kontruktor werden soll
                            //darf nichts in den klammer nicht stehen
    };
    
    BClass::BClass()
    {
    }
    
    int main()
    {
    
        return 0;
    }
    


  • Ich glaube, er hat beabsichtigt, dass in A kein Standardkonstruktor zur Verfügung steht. 😉

    Mir ist grad noch was aufgefallen: using namespace sollte man in Headern immer vermeiden, da dann für alle Dateien, die den Header inkludieren, der ganze Namensraum offengelegt wird.


Log in to reply