Fehler bei der Dateiaufteilung bei einer Template Klasse



  • Hi,
    (Zur Info && um Fragen vorzubeugen:)
    Ich deklariere meine Template Klasse so:

    template <class T> class house
    {
    public:
    	unsigned int	waende;
    	unsigned int	tueren;
    	unsigned int	fenster;
    	char			baustil[256];
    
    public:
    	house ();
    	~house ();
    };
    

    Und ich implementiere Konstruktor und Destruktor in einer seperaten Datei so:

    template <class T> house<T>::house ()
    {
    	tueren = 10;
    	fenster = 20;
    	waende = 15;
    	strcpy( baustil, "fachwerkbau" );
    }
    
    template <class T> house<T>::~house ()
    {}
    

    Die Klasse T verwende ich zurzeit noch nicht.
    Sobald ich jedoch eine Instanz der Klasse erstellen und diese später (automatisch) per Destruktor wieder zerstören lassen will, bringt mir der Linker(!) folgende Fehler:

    main.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: __thiscall house<int>::~house<int>(void)" (??1?$house@H@@QAE@XZ)
    main.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: __thiscall house<int>::house<int>(void)" (??0?$house@H@@QAE@XZ)
    Debug/af.exe : fatal error LNK1120: 2 unaufgeloeste externe Verweise
    

    main.cpp ist die Datei wo die main()-Funktion aufgerufen wird, sowie die Instanz erstellt.
    Diese Fehler treten allerdings nur auf, wenn ich die Implementierung Methoden in einer seperaten cpp Datei einfüge. Die Deklaration der Klasse ist natürlich in einer Headerdatei und die ist natürlich auch in die cpp Datei eingebunden.
    Ich verwende den VC++ 6.0 Compiler
    Ich hoffe jemand kann mir helfen.

    MfG GuEsT_v0.4alpha



  • Hallo,
    Bisher unterstützt noch kein Compiler die Möglichkeit Template-Klassen zu definieren, deren Methoden in einer Seperaten Datei definiert sind. D.h. du musst die gesammte Template-Klasse in einer Header-Datei definieren.

    Dazu gibt es natürlich verschiedene Wege:

    1. Du schreibst den ganzen Code in _eine_ Datei.
    2. Du arbeitest mit dem Präprozessor, mit wessen Hilfe du die cpp-Datei am Ende der Header-Datei einfügst.

    Z.B.

    // template_klasse.h
    template<class T>
    class
    {
          ...
    };
    
    // Hier die cpp-Datei einbinden.
    #include "template_klasse_definition.cpp"
    
    1. ...

    So far.

    Caipi



  • thx


Anmelden zum Antworten