template



  • Ich programmiere gerade ein Template mit visual c++, welches die Vorzüge von stl maps und stl vector vereint.
    Damit ich das template von anderen Klassen aus aufrufen kann, habe ich es in eine header(.h) und in eine Quellcodedatei(.cpp) aufgteilt.
    In der header datei soll man laut meinem C++ Buch vor dem Wort template noch das Wort export schreiben, dieses Wort kennt der Compiler nicht , deswegen habe ich es weggelassen.
    -------------------
    template <class Typ>
    class AFSList
    ...
    public:
    AFSList();
    void add(int id, Typ it);
    ....
    Die Funktionen in der Quellcodedatei sehen wie folgt aus:

    ...
    template<class Typ>
    AFSList<Typ>::AFSList()
    {

    }

    template<class Typ>
    void AFSList<Typ>::add(int id, Typ it)
    {
    ...

    Wenn ich diese Klasse in anderen Klassen einbinde und dann kompiliere gibt es keine Fehler. Wenn ich jedoch das gesamte Prjokt erstelle, bekomme ich folgende Fehler.

    simple.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: __thiscall AFSList<class AFSItems>::AFSList<class AFSItems>(void)" (??0?AFSList@VAFSItems@@@@QAE@XZ) simple.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: void __thiscall AFSList::add(int,class AFSItems)" (?add@?AFSList@VAFSItems@@@@QAEXHVAFSItems@@@Z)
    simple.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: class AFSItems __thiscall AFSList<class AFSItems>::elementAt(int)" (?elementAt@?AFSList@VAFSItems@@@@QAE?AVAFSItems@@H@Z) simple.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: int __thiscall AFSList::size(void)" (?size@?AFSList@VAFSItems@@@@QAEHXZ)
    simple.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: void __thiscall AFSList<class AFSItems>::remove(int)" (?remove@?AFSList@VAFSItems@@@@QAEXH@Z) simple.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: class AFSItems __thiscall AFSList::getAtId(int)" (?getAtId@?AFSList@VAFSItems@@@@QAE?AVAFSItems@@H@Z)
    Debug/testspiel.exe : fatal error LNK1120: 6 unaufgeloeste externe Verweise

    Weiß jemand Rat? Liegt es an dem fehlenden Wort export 😕

    [ Dieser Beitrag wurde am 24.06.2003 um 15:11 Uhr von tbbrother editiert. ]



  • Hi!

    Meines wissens wird export nicht vom VC unterstützt.
    Benenne die .cpp in z.B. .impl oder .templ oder so um und includiere sie am ende Deines Headers.



  • Damit hat es geklappt. Vielen Dank für die schnelle Antwort. 🙂



  • Templateklassen müssen in einer Datei stehen.

    Darum mach es so wie Knuddlbaer schon schrieb, oder schreib alles in eine
    Datei.


Anmelden zum Antworten