Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » template Liste

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
11.12.2005, 16:55 Uhr
mauralix



Hallo Welt!!!

Ich werd nochmal blede mit meiner Liste. Ich will mir wie man sieht eine template Liste schreiben, aber das geht nicht. Die Liste ist sicher nicht besonders gut geschrieben, dass soll sie auch nicht umbedingt sein, denn dafür gibt es eh die STL. Zuerst habe ich die Liste ohne Templates geschrieben, da hat alles noch prima funktioniert, aber jetzt gibt er mir immer eine Vielzahl von Fehlern in der Methode Last() und zwar nur dort. Alles Andere scheint syntaktisch zu funktionieren. Langer Rede gar kein Sinn hier der schmutzige Code.


C++:

//in List.h

#ifndef LIST_H
#define LIST_H

#include <iostream.h>

    
template <class T>
class LinkedList
{

    template <class T>
    class Node
    {
    public:
        T m_Element;
        Node<T> *m_Next;
    };

    private:
        Node<T> m_Head;
        unsigned int m_Length;
        Node<T> *Last(void);

    public:
        
        LinkedList(void);
        virtual ~LinkedList(void);
        void Add(T elm);
        void ClearList(void);
        unsigned int GetLength(void);
        T GetElement(unsigned int Position);

};

#endif

// List.cpp

#include "List.h"

template <class T>
LinkedList<T>::LinkedList(void)
{    
    m_Head.m_Element={0};
    m_Head.m_Next=NULL;
    m_Length=0;
}

template <class T>
LinkedList<T>::~LinkedList(void)
{    
    ClearList();
}

template <class T>
void LinkedList<T>::ClearList(void)
{
    while(NULL!=m_Head.m_Next)
    {
        Node<T> *p=&m_Head;

        while(Last()!=p->m_Next)
        {
            p=p->m_Next;
        }
    
        delete Last();
        p->m_Next=NULL;
        m_Length--;
    }

}

template <class T>
T LinkedList<T>::GetElement(unsigned int Position)
{
    Node<T> *p=&m_Head;

    if(Position>m_Length) return NULL;
    
    for(unsigned int i=0;i<Position;i++)
    {
        p=p->m_Next;
    }

    return p->m_Element;
}

template <class T>
Node<T> *LinkedList<T>::Last(void)
{
    Node<T> *p=&m_Head;
    
    while(NULL!=p->m_Next)
    {
        p=p->m_Next;
    }

    return p;
}

template <class T>
void LinkedList<T>::Add(T elm)
{
    
    Node<T> *NewOne=new Node<T>;
    NewOne->m_Element=elm;
    NewOne->m_Next=NULL;
    Last()->m_Next=NewOne;
    m_Length++;

}

template <class T>
unsigned int LinkedList<T>::GetLength(void)
{
    return m_Length;
}




Bitte sagt mir mal jemand was da nicht stimmt. Ich wäre sehr dankbar.
Ich bin nun schon echt bald im verzweifeln, weil ich Syntax-Fehler nicht gewohnt bin, weil man die normalerweise schnell findet.
Außer man hat es mit templates zu tun...
--
nur olfaktorisch fassbar....
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
11.12.2005, 17:26 Uhr
Pablo
Supertux
(Operator)


Ich würde sagen, das Problem liegt darin, dass deine Templates-Definition und Implementation nicht in der selben Datein sind. Es muss alles in der Header Datei sein; die Implementation kann nicht kompiliert und einfach so gelinkt werden, sondern wird für jeden benutzten Typ kompiliert. Versuch mal den ganzen Code der .cpp Datei in die .h Datei zu packen.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
11.12.2005, 17:40 Uhr
Gap



Ein Lösung wär auch am Ende der Header-Datei die C++-Datei zu includen, dann hast du trotzdem eine Trennung.
Natürlich darfst du dann nicht in der C++-Datei die Header-Datei includen.

Dieser Post wurde am 11.12.2005 um 17:40 Uhr von Gap editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
11.12.2005, 20:55 Uhr
ao

(Operator)


Am besten wäre, du würdest uns nicht lange rumraten lassen und sagen, welche Fehlermeldung eigentlich angezeigt wird. Und an welcher Stelle genau.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
12.12.2005, 18:08 Uhr
mauralix



ich glaube nicht, dass ihr alle Fehlermeldungen sehen wolllt.
Das sind 1000sende angefangen von < fehlt bis ; fehlt usw...
--
nur olfaktorisch fassbar....
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
12.12.2005, 19:47 Uhr
ao

(Operator)


Wahrscheinlich zwei oder drei echte, und der Rest sind Folgefehler. Letzter Aufruf, poste die ersten Meldungen, oder lös deine Probleme alleine.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
12.12.2005, 23:32 Uhr
Hans
Library Walker
(Operator)



Zitat von mauralix:
ich glaube nicht, dass ihr alle Fehlermeldungen sehen wolllt.
Das sind 1000sende angefangen von < fehlt bis ; fehlt usw...

Hi,

normalerweise ist auch nur die erste Fehlermeldung relevant, vor allem dann, wenn etwas fehlt. Danach kommen meist nur Folgefehler. Ach ja, und wenn ein Zeichen fehlt, dann ist der Fehler auch nicht unbedingt in der Zeile, die in der Fehlermeldung angegeben wird, sondern in einer Codezeile davor.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: