Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Problem mit STL list und Template Classe

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
27.05.2006, 11:16 Uhr
Steffen



Hallo,

ich habe folgende Template Classe, die eine (stl) list enthält....


C++:
#ifndef LISTPRIORITYQUEUET_H_
#define LISTPRIORITYQUEUET_H_

#include <list>
#include "QueueEmptyEx.h"

using namespace std;

template<class Comparable>
class ListPriorityQueueT
{
    list<Comparable> entries;
    
    public:
    // Konstruktoren
    ListPriorityQueueT();

    // Methoden
    void enqueue (const Comparable &e);
    Comparable dequeue () throw(QueueEmptyEx);
};

#endif /*LISTPRIORITYQUEUET_H_*/




C++:
#include "ListPriorityQueueT.h"

template<class Comparable>
ListPriorityQueueT<Comparable>::ListPriorityQueueT() {}

template<class Comparable>
void ListPriorityQueueT<Comparable>::enqueue(const Comparable &e)
{
//    cout << "Wert: " << e << endl;
    entries.push_back(e);
    entries.sort();
//    cout << "Länge: " << entries.size() << endl;
}

template<class Comparable>
Comparable ListPriorityQueueT<Comparable>::dequeue() throw(QueueEmptyEx)
{
    Comparable temp;
    
    if(!entries.empty())
    {
        temp = entries.front();
        entries.pop_front();
        return(temp);
    }
    else throw QueueEmptyEx();
}



In der main wird nun ein Objekt davon erzeugt und ich bekomme in dieser Zeile folgende Fehlermeldung.


C++:
...
    ListPriorityQueueT<string> ql;
...



Fehler: undefined reference to `ListPriorityQueueT<std::string>::ListPriorityQueueT()'

Ich kenn mich leider noch nicht so aus und bin bis jetzt noch nicht auf den Fehler gekommen

. Was mach ich falsch ?


Vielen Dank

Gruß Steffen
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
27.05.2006, 12:53 Uhr
Spacelord
Hoffnungsloser Fall



Zitat von Steffen:

. Was mach ich falsch ?



Das gleiche wie knapp 700000000000000000 Leute vor dir .

Die Templatedefinitionen müssen mit in den Header.

Gruss Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
28.05.2006, 00:17 Uhr
Steffen



Ich hab jetzt alles in die Header-Datei geschrieben, allerdings bekomm ich immer noch den gleichen Fehler....

wenn ich das <string>


C++:
    
ListPriorityQueueT<string> ql;



in <int> ändere, bekomm ich keinen Fehler mehr...

Ich hab soweit jetzt folgendes


C++:
#ifndef LISTPRIORITYQUEUET_H_
#define LISTPRIORITYQUEUET_H_

#include <list>
#include "QueueEmptyEx.h"

using namespace std;

template <class T>
class ListPriorityQueueT
{
    list<T> entries;
    
    public:
    // Konstruktoren
    ListPriorityQueueT();

    // Methoden
    void enqueue(const T &e)
    {
        //    cout << "Wert: " << e << endl;
        entries.push_back(e);
        entries.sort();
    //    cout << "Länge: " << entries.size() << endl;
    }
    
    T dequeue() throw(QueueEmptyEx)
    {
        T temp;
    
        if(!entries.empty())
        {
            temp = entries.front();
            entries.pop_front();
            return(temp);
        }
        else throw QueueEmptyEx();
    }
};

#endif /*LISTPRIORITYQUEUET_H_*/



und der Aufruf in der main, der den Fehler verursacht


C++:
....
ListPriorityQueueT<string> ql;
....



Fehler: undefined reference to `ListPriorityQueueT<std::string>::ListPriorityQueueT()'

Woran liegts ?

Gruß Steffen

Dieser Post wurde am 28.05.2006 um 00:20 Uhr von Steffen editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
28.05.2006, 01:23 Uhr
Spacelord
Hoffnungsloser Fall


#include <string> ?
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
28.05.2006, 01:57 Uhr
Helmut



<string> hab ich auch vermisst. Doch ich konnte es auch ohne <string>
fehlerfrei kompilieren.

C++:
#ifndef LISTPRIORITYQUEUET_H_
#define LISTPRIORITYQUEUET_H_

#include <list>
//#include "QueueEmptyEx.h"

using namespace std;

template <class T>
class ListPriorityQueueT
{
    list<T> entries;
    
    public:
    // Konstruktoren
    // Defaultkonstruktor von mir ausgeschlossen -->ListPriorityQueueT();

    // Methoden
    void enqueue(const T &e)
    {
        //    cout << "Wert: " << e << endl;
        entries.push_back(e);
        entries.sort();
    //    cout << "Länge: " << entries.size() << endl;
    }
    
    T dequeue() //throw(QueueEmptyEx)
    {
        T temp;
    
        if(!entries.empty())
        {
            temp = entries.front();
            entries.pop_front();
            return(temp);
        }
        //else throw QueueEmptyEx();
    }
};

#endif /*LISTPRIORITYQUEUET_H_*/


C++:

#include "stdafx.h"
#include "LISTPRIORITYQUEUET.h"

int _tmain(int argc, _TCHAR* argv[])
{
    ListPriorityQueueT<string> ql;

   return 0;
}




Konstruktor hab ich ausgeklammert, damit ich kompilieren konnte.
Ich benutzte VS2005

mfg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
28.05.2006, 09:55 Uhr
Spacelord
Hoffnungsloser Fall



Zitat von Helmut:

Konstruktor hab ich ausgeklammert, damit ich kompilieren konnte.


Jetzt wo du es sagst....
Die Definition vom Konstruktor fehlt in der zweiten Variante.
Da hätte man Anhand der Fehlermeldung auch eher drauf kommen können .
Das war jetzt aber unglücklich dass Steffen 2mal die gleiche Fehlermeldung mit unterschiedlichen Fehlerquellen hatte .

Gruss Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
30.05.2006, 18:12 Uhr
Steffen



jetzt klappt es....

vielen dank!
 
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: