Anfängerfrage: Eigene Liste



  • Hallo, ich habe versuch eine eigene Liste zu programmieren, aufgrund meiner eher geringen C++ Kenntnisse habe ich nur eine "int-Liste" erstellt, aber auch die liefert noch fünf Fehler und eine Warnung (Compiler: VC++).
    Datei list.h:

    namespace Listen
    {
    class int_LE
    {
    private:
    	int_LE* next;
    	int_LE* prev;
    	int value;
    	int_List list;
    public:
    	int* show()
    	{
    		return &value;
    	}
    	int_LE(int newvalue)
    	{
    		value = newvalue;
    	}
    	int_LE()
    	{
    	}
    	inline ~int_LE()
    	{
    	}
    	int_LE* renext()
    	{
    		return next:
    	}
    	int_LE* reprev()
    	{
    		return prev;
    	}
    	int_List relist()
    	{
    		return list;
    	}
    };
    class int_List
    {
    private:
    	int_LE* first;
    	int_LE* last;
    	int anzahl;
    public:
    	int_List()
    	{
    		first = 0;
    		last = 0;
    		anzahl = 0;
    	}
    	virtual ~int_List(void)
    	{
    		while (anzahl > 0)
    		{
    			pop();
    		}
    	}
    	int_LE* refirst()
    	{
    		return first;
    	}
    	int_LE* relast()
    	{
    		return last;
    	}
    	int reanz()
    	{
    		return anzahl;
    	}
    	bool append(int_LE element)
    	{
    		last.renext() = &element;
    		element.reprev() = &last;
    		last = &element;
    		element.relist() = &this;
    		element.renext() = 0;
    		++anzahl;
    		return true;
    	}
    	int_LE pop()
    	{
    		int_LE* hallo;
    		hallo = last;
    		last = last.reprev();
    		last.renext() = 0;
    		hallo.reprev() = 0;
    		hallo.relist() = 0;
    		--anzahl;
    		return hallo;
    	}
    };
    }
    

    Datei Test.cpp

    #include "list.h"
    #include <iostream>
    
    using namespace Listen;
    
    void main()
    {
    	int_List Ansgar;
    	int_LE Bernhard(9);
    	int_LE Bern;
    	if (Ansgar.append(Bernhard))
    	{
    		std::cout << "Bernhard appended!"<<std::endl;
    		Bern = Ansgar.pop();
    		std::cout << Bern.show()<<std::endl;
    	}
    	else
    	{
    		std::cout << "geht nicht!"<<std::endl;
    	}
    
    }
    

    thx
    Glamdring



  • Was ist deine Frage?



  • Oh, mmmmhh ja, das hab ich vergessen:
    Die Fehler:
    error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'list'
    error C2501: 'int_List' : Fehlende Speicherklasse oder Typbezeichner
    error C2501: 'list' : Fehlende Speicherklasse oder Typbezeichner
    error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'relist'
    error C2501: 'int_List' : Fehlende Speicherklasse oder Typbezeichner
    warning C4183: 'relist': Definition der Member-Funktion sieht aus wie ctor, aber der Name entspricht nicht der umschliessenden Klasse

    Warum kommen die Fehler, ist doch (meiner Meinung nach) alles richtig

    thx
    Glamdring



  • Müssen Inline-Methoden nicht mit einem ; abgeschlossen werden?



  • Deiner Klasse int_LE ist int_List noch unbekannt.
    Mach 2 hpp's und include int_List in int_LE.

    Jockel



  • inline: Habs im Code geändert, kein neuer Fehler, kein alter weck.
    Jockelx: Danke, ich versuchs.

    Gruß
    Glamdring



  • Der Compiler kennt eben int_List an der Stelle, wo du es zum ersten mal verwendest, nicht. Woher auch? Die Klasse steht ja erst unten drunter.

    BTW: Warum sollte ein Listenelement eine Liste enthalten? Was ist der Sinn dahinter?



  • AJ schrieb:

    Müssen Inline-Methoden nicht mit einem ; abgeschlossen werden?

    nein



  • Ich bekomm n0ch folgende Fehler:
    warning C4182: Die #include-Verschachtelungsebene ist 363 tief; Endlosschleife moeglich
    fatal error C1076: Compiler-Beschraenkung: Interne Heap-Grenze erreicht; Verwenden Sie /Zm, um eine hoehere Grenze anzugeben

    Warum???



  • include guards vergessen?



  • Glamdring schrieb:

    int_LE pop()
    	{
    		int_LE* hallo;
    		//...
    		return hallo;
    	}
    

    Mich wundert ein wenig, das dies ohne Fehler arbeitet. Die Funktion pop() sollte ja eigentlich ein int_LE-Wert zurückliefern, du gibst aber einen Zeiger zurück.
    Meines Erachtens nach müsste es richtig heissen:

    return *hallo;


Anmelden zum Antworten