Template nutzen für Klassen



  • Hallo,

    ich möchte gerne den Template-Mechanismus nutzen, um eine Klasse aus mehreren alternativen Klassen zu bauen. Eigentlich sollte die das wie folgt funktionieren. Wenn die ich die Memberfunktion member_function weglasse, dann geht das bei VC++ 6.0 auch gut. Wenn ich die Funktion hinzunehme, sagt mir der Compiler: Fuer die Verwendung einer Vorlagenklasse ist eine Vorlagen-Argumentenliste erforderlich. Frage: Ist es überhaupt möglich den Template-Mechanismus hierfür zu verwenden und wenn ja, was mache ich falsch ?

    Vielen Dank

    template <class T>
    class upper_class : public T {
    public:
    const char *member_function();
    };

    template <class T>
    const char *upper_class::member_function() {
    return ("info");
    }



  • Du hast etwas bei der Definition der Methode vergessen - richtig heißt das:

    template <class T> 
    const char *upper_class<T>::member_function() { 
    return ("info"); 
    }
    

    (schließlich will der Compiler gerne wissen, was er mit dem "T" in diesem Template anfangen soll)



  • template <class T> 
    const char* upper_class<T>::member_function()
    { 
        return ("info"); 
    }
    

    wenn ich mich nicht irre.

    PS: C++-Highlighter verwenden 😉

    *edit* Zu spät 🙄



  • [edit] ich nehm (fast) alles zurück! [/edit]

    Greetz, Swordfish



  • Vielen Dank für die schnelle Antwort, doch nun habe ich das Problem, dass der Linker nicht will. Ich habe folgenden Code:

    template <class T>
    class StepAxis2Placement : public T {
    
    	public:
    	const char *member_function();
    
    };
    
    template <class T>
    const char *StepAxis2Placement<T>::member_function(){
    	return ("Test");
    }
    

    und versuche das ganze wie folgt aufzurufen:

    StepAxis2Placement<StepAxis2Placement3D> test;
    
    	const char *ausgabe = test.member_function();
    

    Beim Linken sagt Visual C mit: Nichtaufgeloestes externes Symbol "public: char const * __thiscall StepAxis2Placement<class StepAxis2Placement3D>::member_function(void)" (?member_function@?$StepAxis2Placement@VStepAxis2Placement3D@@@@QAEPBDXZ)



  • Template-Klassen und -Methoden sollten komplett in der Header-Datei stehen (oder in der Quellcode-Datei, in der sie verwendet werden).



  • [quote="Neku"]Template-Klassen und -Methoden sollten komplett in der Header-Datei stehen (oder in der Quellcode-Datei, in der sie verwendet werden).[/quote]

    Vielen Dank für Eure Hilfe, jetzt funktioniert alles !!

    Carsten


Log in to reply