Forward Declaration in einer Template Klasse



  • Hallo Leute,

    ich habe ein Problem....

    Ich habe zwei verschiedene Template-Klassen

    template<class T>
    class beta;            //Forward declaration
    
    template<class T>
    class alpha
    {
    public:
        void TransformNormal(beta& value);
    
    private:
        T m_test;
    };
    

    und...

    template<class T>
    class alpha;            //Forward declaration
    
    template<class T>
    class beta
    {
    public:
        void Rotate(alpha& value);
    
    private:
        T m_test;
    };
    

    Wie man sehen kann wird in der Template-Klasse "alpha" die Funktion TransformNormal verwendet, der eine Objektreferenz vom Typ Beta übergeben wird. In der Template-Klasse "Beta" wird eine Funktion verwendet, die eine Referenz vom Typ Alpha entgegen nimmt.

    in der CPP-Datei sehen die Funktionen wie folgt aus:

    template<class T>
    void alpha<T>::TransformNormal(beta<T>& value)
    {
        ......
    }
    

    sowie

    template<class T>
    void beta<T>::Rotate(alpha<T>& value)
    {
        ......
    }
    

    Beim kompilieren bekomme ich nun die Fehlermeldung:

    error C2371: 'beta<T>::Rotate': Neudefinition; unterschiedliche Basistypen
    error C2371: 'alpha<T>::TransformNormal': Neudefinition; unterschiedliche Basistypen

    Hat irgend jemand eine Lösung für dieses Problem!?

    grüße

    Gogonfa



  • Hallo,

    du musst den Template-Typ-Parameter T natürlich auch in der Klasse selbst angeben:

    public:
        void TransformNormal(beta<T>& value);
    
    public:
        void Rotate(alpha<T>& value);
    

    Aber bedenke:

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39467.html

    MfG,

    Probe-Nutzer



  • Hallo,

    das ist kein Problem....habe den Code in Header und CPP-File getrennt....

    Habe, um die Probleme mit dem Linker zu Umgehen einfach eine Header-Datei erzuegt, in der nur die Alpha.h und die Alpha.cpp eingebunden werden.

    //Gamma.h
    #include "alpha.h"
    #include "alpha.cpp
    

    Um die template-Klasse zu verwenden muss man nun einfach nur die Gamma.h in sein Projekt einbinden....

    Das funzt...ohne Probleme....das einzige Problem wie gesagt sind die Probleme mit der Forward declaration

    grüße

    Gogonfa


Anmelden zum Antworten