Element dynamischer liste hinzufügen?



  • Hi, ich wollte mal meine eingene Klasse erstellen, die wie ein simpler, dynamisher array funktioniert. Leider geht's schon zu begin schief: Ich kriege krumme werte in die liste, und ich hab' keinen schimmer warum. Wie mache ich also, dass ein element einfach hinzugefügt werden kann ?

    template<class T> class LIST
    {
    public:
    	LIST()
    	{
    		count = 0;
    	}
    	void operator << (T elem)
    	{
    		count++;
    		T* nlist = new T[count];
    		if (!count)
    			for (int i=0; i<count-1; i++)
    				nlist[i] = list[i];
    		nlist[count] = elem;
    		list = nlist;
    	}
    	T operator [] (int ix)
    	{
    		return list[ix];
    	}
    	int gsize() {return count};
    private:
    	int count;
    	T* list;
    };
    


  • Der Fehler ist bei "if(!count)" zu suchen.
    Du zählst den Zähler hoch, und kopierst das Array aber nur wenn count false ist also !=0!



  • und was soll ich ändern ?
    Wenn ich das einfach weglasse kireg ich eine access violation 😕



  • Ein weiteres Problem ist, dass du an index 0 nie nen Wert reinschreibst!
    Indize bei Arrays starten mit i=0. Beim ersten list << wert zählst du count auf 1, dein Array ist noch nicht initialisiert, an index=0 existiert noch kein Wert. Wenn du nun das Array kopierst wird auf einen ungültigen Wert zugegriffen -> access violation.
    SOlltest du Problem haben dir das vorzustellen, mal dir eine Skizze auf, wie dein Objekt aussschaut am Anfang, und nachdem du Werte hizufügst.

    BTW: EIn Debugger sagt dir das. Schau dass du dich bald damit anfreundest, dass du bei jedem unerklärlichen Fehler nicht Stunden investieren und dann ins Forum posten musst 😉


Anmelden zum Antworten