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 BasistypenHat 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