Arrays von Klassen manipulieren



  • Hallo C++ Community,

    ich habe folgende Frage: Wieso kann man nicht Arrays von Membervariablen über den Gültigkeitsbereich einer Funktion manipulieren? Bei Arrays die man in main() erzeugt scheint es zu funktionieren. Kann mir jemand vielleicht sagen wo mein Denkfehler liegt?

    #include <iostream>
    #include "class1.h"
    
    using namespace std;
    
    void  setClass (Class1 Class,int n);
    
    void showClass (Class1 Class,int n);
    
    void  setInt ( int a[],int n);
    
    void showInt (int a[],int n);
    
    int main()
    {
        Class1 K;
    
        cout << "Class" << endl;
    
        setClass(K,20);
    
        showClass(K,20);
    
        int i[100];
    
        cout << "Int" << endl;
    
        setInt(i,20);
    
        showInt(i,20);
    
        return 0;
    }
    
     void  setClass (Class1 Class,int n)
     {
        int i;
    
        cout << "Function Start" << endl;
    
        for(i=0;i<n;i++)
        {
            Class.n[i] = i*3;
    
           cout << i+1 << ".Wert = " << Class.n[i] << endl;
        }
    
        cout << "Function End" << endl;
     }
    
    void showClass (Class1 Class,int n)
    {
        int i;
    
        for(i=0;i<n;i++)
        {
            cout << i+1 << ".Wert = " << Class.n[i] << endl;
        }
    }
    
    void  setInt (int a[],int n)
    {
        int i;
    
        for(i=0;i<n;i++)
        {
            a[i] = i*3;
        }
    }
    
    void showInt (int a[],int n)
    {
        int i;
    
        for(i=0;i<n;i++)
        {
            cout << i+1 << ".Wert = " << a[i] << endl;
        }
    }
    
    #ifndef CLASS1_H
    #define CLASS1_H
    
    class Class1
    {
        public:
            int n[100];
            Class1();
            ~Class1();
        protected:
        private:
    };
    
    #endif // CLASS1_H
    


  • Wo ist das Problem?

    Abgesehen davon, dass das so nicht kompiliert, weil Kon/Destruktor nicht definiert sind?

    Edit:
    Hab Dein Problem verstanden.
    Du setClass arbeitet mit einer Kopie von K, die am Ende der Funktion wieder zerstört wird, wie das in C++ so üblich ist?!



  • "man kann nicht" ist ja sehr präzise ...

    Spontan würde ich sagen, dein Problem ist, dass das

    void  setClass (Class1 Class,int n)
    

    eine Kopie macht und nicht das Original ändert.
    Benutze Referenzen

    void  setClass (Class1& Class,int n)
    


  • Tatsache das mit den Referenzen hat mein Problem gelöst 🙂 Vielen Dank!



  • Und jetzt geh noch nen Schritt weiter, und mach Methoden draus.


Log in to reply