Wie kann ich eine Klasse kopieren?



  • Ich müsste nur wissen, was an der folgenden Zeiler falsch ist und wie sie richtig heißen sollte:

    *(AZeigerListe[i]) = &(AKnotenListe[i]);
    

    Knoten AKnotenListe[100] -> Array of 100 Knoten
    Knoten (*AZeigerListe)[100] -> Array of 100 Zeigern

    Viele Grüße
    pmw



  • dEUs schrieb:

    Lass einfach mal die Dereferenzierung (*) weg.



  • Leider geht AZeigerListe[i] = &(AKnotenListe[i]); genaun so wenig 😞



  • Schau dir mal dies an:

    int a[100];
    int* b[100]; // <--
    for (int i = 0; i < 100; i++)
    {
    	a[i] = i;
    	b[i] = new int; // <--
    	*b[i] = a[i];  // <--
    	std::cout << i << ": " << a[i] << " " << *b[i] << "\n";
    }
    

    Das musst du jetzt auf deine Knoten anpassen.



  • Danke für die Antwort. Jetzt laäuft zu mindest dieser Teil. Ich habe aber leider wieder ein Problem:

    struct Knoten
    {
       bool Ende;
       Knoten *links;
       Knoten *rechts;
       long double Wahrscheinlichkeit;
       unsigned char Zeichen;
       unsigned short Laenge;
       bool Code[256];
    };
    
    Knoten AKnotenListe[100];  // Array of 100 Knoten
    Knoten *AZeigerListe[100];  //Array of 100 Zeigern
    
    for (unsigned short i=0; i<IAnzahlZeichen-1; ++i)
    {     
       AKnotenListe[i].Ende = 0;
       AKnotenListe[i].Wahrscheinlichkeit = 0;
       AKnotenListe[i].links = NULL;
       AKnotenListe[i].rechts = NULL;   
    }
    
    for (unsigned short i=0; i<100; ++i)
    {   
       AZeigerListe[i] = new Knoten;
       *AZeigerListe[i] = AKnotenListe[i];
    }
    

    An folgender Stelle stürzt das Programm mit einem written-Error ab:

    (*AZeigerListe[1]).Laenge = (*AZeigerListe[1]).Laenge + 1;
    


  • (*AZeigerListe[1]).Laenge += 1;
    

    Edit: Mache deine Variablen doch private. Dann musst du zuätzlich über eine Methode zugreifen (z.B. set() und get())

    #include <iostream>
    
    class A
    {
    private:
    	int laenge;
    public:
    	A() : laenge(1)
    	{}
    	inline int get() const
    	{
    		return laenge;
    	}
    	inline void set(int i)
    	{
    		laenge += i;
    	}
    };
    
    int main()
    {
    	A a[100];
    	A* b[100];
    	for (int i = 0; i < 100; i++)
    	{
    		b[i] = new A;
    		std::cout << i << ": " << a[i].get() << " " << (*b[i]).get() << "\n";
    	}
    	(*b[1]).set(1);
    	std::cout << (*b[1]).get();
    }
    

Anmelden zum Antworten