Array einer Template Klasse Chain



  • Hallo,

    ich habe ein Problem mit meinem Programm. Ich soll ein Array mit Listen als Elemente bestücken. Aber irgendwie will dies nicht klappen, ich hab da nen Zeiger-Problem und ich weiß nicht, wie ich dieses lösen kann.
    Das erste Array-Element zeigt immer wieder auf sich selber, sodass ich ne Dauerschleife erzeuge.
    Hier mal der code

    template <class T>
    class Chain{
    public:
    
    	friend void Equivalenz();
    	template <class S>
    	friend ostream& operator<< (ostream & ,const Chain<S>& );
    	Chain(T t = 0, Chain<T> *h = NULL): data(t), next(h) {};
    
    private:
    
    	T data;
    	Chain<T> *next;
    
    };
    template <class T>
    ostream& operator<< (ostream & ostr,const Chain<T>& a){
    
    	Chain<T> temp = a;
    
    	while(&temp){
    
    		ostr<<temp.data<<" -> ";
    		temp = *temp.next;
    
    	}
    
    	return ostr;
    }
    
    void Equivalenz(){
    
    	ifstream inFile("Eingabe.txt");	
    
    	int n,j,i;
    	inFile >> n >> i >> j;
    	cout<<n<<endl;
    	cout<<i<<endl<<j<<endl;
    	Chain<int> *first = new Chain<int>[n];
    
    	for(int s = 0;s<n;s++) first[s] = NULL;
    
    	while(inFile.good()){
    
    		Chain<int> *a = new Chain<int>(i);
    		a->next = &first[i];
    		first[i] = *a;
    		Chain<int> * b = new Chain<int>(j);
    		b->next = &first[j];
    		first[j] = *b;
    
    		inFile >> i >> j;
    
    	}
    
    	cout<<first[0];
    
    }
    
    int main()
    {
    	int n;
    	Equivalenz();	
    	cin>>n;
    	return 0;
    }
    

    Ich habe schon einiges Versucht, aber entweder bekomme ich Referenzierungsfehler oder erzeuge wieder meine schöne Dauerschleife.
    Ich bin derzeit recht ratlos und ehrlich gesagt auch leicht angefressen 😃
    Vllt könnt ihr mir ja helfen !

    LG



  • Hallo,

    die Abfrage "while(&temp)" ergibt ja auch keinen Sinn.
    Wenn du schon mit Zeigern hantierst, dann mußt du diese auch konsequent verwenden:

    const Chain<T> * temp = &a;
    
        while(temp)
        {
            ostr<<temp->data<<" -> ";
            temp = temp->next;
    
        }
    

Anmelden zum Antworten