problem bei konvertierung



  • hallo,
    ich hab mal vor einiger zeit eine liste in borland c++ builder 4 geschrieben.
    nun, da ich sie in vc++ implementiert hab geht sie nicht mehr
    ich bekome immer folgende fehlermeldung die ich nicht wirklich interpretieren kann

    test error LNK2001: Nichtaufgeloestes externes Symbol "public: __thiscall LISTE<int>::~LISTE<int>(void)" (??1?LISTE@H@@LISTE@H@@$FQAE@XZ)

    vieleicht kann mir einer weiterhelfen in dem er mr sagt was das bedeutet .. die komplette liste werde ich hier nicht auffüren, weil das z ulang ist .. aber hier sit mal die klassendefinition und der kon-/destruktor

    klasse liste:

    #include <ios>
    #include <iostream>
    
    template <class T> class LELEM;
    
    template <class T> class LISTE  //einfach verkettete liste
    {
      LELEM<T> *anf;                //pointer auf den anfang der liste
      LELEM<T> *akt;                //pointer auf die aktuelle position inerhalb der liste
    
    public:
      LISTE (void);
      ~LISTE (void);
    	void ins (T wert);            //insert: ein element einfügen
      void del (void);              //delete: ein element löschen
      T get (void);                 //wert an der aktuellen stelle auslesen
      void set (T wert);            //wert an der aktuellen stelle setzen
      void adv (int index);         //advance: gehe ein element in der liste weiter oder geht zu index
      void res (void);              //reset: setzt die aktuelle position an den anfang
      int empty (void);             //ist die liste leer?
      int end (void);               //ist man am ende der liste?
    };
    
    template <class T> class LELEM  //listenelement einer einfach verketteten liste
    {
      T element;                    //ein element einer einfach verketteten liste
      LELEM<T> *nf;                 //zeiger auf das nachfolgende element
    
    public:
      LELEM (void);
      friend class LISTE<T>;
    };
    

    kon-/destruktor:

    ////////////////////////////////////////////////////////////////////////////////
    // KLASSE: LISTE --> Konstruktor                                              //
    ////////////////////////////////////////////////////////////////////////////////
    template <class T> LISTE<T> :: LISTE (void)
    {
      anf = new LELEM<T>;
      akt = anf;
    }
    
    ////////////////////////////////////////////////////////////////////////////////
    // KLASSE: LISTE --> Destruktor                                              //
    ////////////////////////////////////////////////////////////////////////////////
    template <class T> LISTE<T> :: ~LISTE (void)
    {
      akt = anf;
      while (!empty ())               //solange löschen bis liste leer ist
      {
        del();
      }
      delete anf;                     //dummy LELEM löschen
    }
    

    danke wie immer schon mla im vorraus !

    ps: stl liste will ich diesem fall mal net 🙂
    also keine antworten in die richtung bitte.



  • fehler gefunden !
    -> ich durfte die funktionen net in einer cpp inline schreiben sondern musste sie in der .h definieren ..
    kann mir nun vieleicht einer sagen warum ?



  • Der Compiler muss T auflösen können, sonst kann er die Methode nicht erstellen und wenn sie nicht da ist, kann der Linker sie nicht finden...
    Und der Compiler kann sie nur auflösen, wenn er die Funktion kennt, sie also in der .h steht. Laut Standard gibt es das Schlüsselwort "export", das unterstützt aber kaum ein Compiler.


Anmelden zum Antworten