probleme mit templateklasse
-
hi,
ich habe leider arge Probleme mit dieser Kassenkonstruktion
ich bekomme die Fehlermeldung:
fatal error C1001: INTERNER COMPILER- FEHLERvorher hatte ich beim Konvertierungskonstruktor der abgeleiteten Klasse
noch einen zweiten Parameter
so: coords3D_c(coords2D_c<T> coords,T z) { /.../ this->z=z;}
ich bekam den fehler:
error C2504: 'coords2D_c<int>' : Basisklasse undefiniert
ich dachte mir vielleicht liegt es daran, dass bei einem konv.konstruktor
alle dem ersten Parameter folgenden weiteren Parameter einen Defaultwert haben müssen
also: coords3D_c(coords2D_c<T> coords,T z = 0) { /.../ this->z=z;}
das aber gibt den fehler wie obenhat jemand eine idee?
tschao
lukas// Forward-Deklarations: template <typename T> class coords2D_c; template <typename T> class coords3D_c; template<typename T> class coords2D_c { public: T x,y; coords2D_c() { x=0; y=0; //printf("2D-Konstruktor\n"); } virtual ~coords2D_c() {//printf("2D-Destruktor ~\n"); } //ConversationConstructor coords2D_c(coords3D_c<T> coords) { x=coords.x; y=coords.y; } virtual coords2D_c<T> operator+(coords2D_c<T> coords) { coords2D_c<T> sum; sum.x=x+coords.x; sum.y=y+coords.y; return (sum); } virtual coords2D_c<T> operator-(coords2D_c<T> coords) { coords2D_c<T> diff; diff.x=x-coords.x; diff.y=y-coords.y; return (diff); } }; template<typename T> class coords3D_c:virtual public coords2D_c<T> { public: T z; coords3D_c(): coords2D_c<T>() { z=0; //printf("3D-Konstruktor\n"); } virtual ~coords3D_c() { //printf("3D-Destruktor ~\n"); } //ConversationConstructor coords3D_c(coords2D_c<T> coords) { this->x=coords.x; this->y=coords.y; this->z=0; } virtual coords3D_c<T> operator+(coords3D_c<T> coords) { coords3D_c<T> sum; sum.coords2D_c<T>::operator+(coords2D_c<T>(coords)); sum.z=z+coords.z; return (sum); } virtual coords3D_c<T> operator-(coords3D_c<T> coords) { coords3D_c<T> diff; diff.coords2D_c<T>::operator-(coords2D_c<T>(coords)); diff.z=z-coords.z; return (diff); } };
-
coords2D_c(coords3D_c<T> coords)
coords3D_c ist zu dem zeitpunkt noch nicht vollständig bekannt, dh man darf nur zeiger oder referenzen auf die klasse haben, dh man darf nicht auf die elemente der klasse zugreifen, da sie zu dem zeitpunkt noch nicht bekannt sind.
tipp: von basisklasse ableiten, dann klappt das auch
-
dazu habe ich doch die Vorwärtsdeklarationen.
mit denen sollte es doch eigentlich gehen oder?template <typename T> class coords2D_c; template <typename T> class coords3D_c;
und was meinst du mit "von basisklasse ableiten"
das hab ich doch gemacht oder??template<typename T> class coords3D_c:virtual public coords2D_c<T> { /*....