problem mit konvertierungskonstruktor



  • hi,
    ich bekomme mit diesen beiden Klassen
    jede menge Fehler (weiter unten)

    könnte es vieleicht an der Reihenfolge liegen?
    Ist dem Compiler vieleicht coords3D_c noch nicht bekannt?
    aber beim konvertierungskonstruktor regt er sich schon über "coords2D_c(" auf
    hm... 😕
    habt ihr vielleicht eine ahnung?

    tschao
    lukas

    template<typename T>
    class coords2D_c
    {
    	T x,y;
    public:
    	coords2D_c()
    	{
    		x=0;
    		y=0;
    	}
    	//ConversionConstructor
    	coords2D_c(coords3D_c coords)
    	{
    		x=coords.x;
    		y=coords.y;
    	}
    	coords2D_c operator+(coords3D_c coords)
    	{
    		coords3D_c sum;
    		sum.x=x+coords.x;
    		sum.y=y+coords.y;
    		return (sum);
    	}
    	coords2D_c operator-(coords3D_c coords)
    	{
    		coords3D_c diff;
    		diff.x=x-coords.x;
    		diff.y=y-coords.y;
    		return (diff);
    	}
    
    };
    
    template<typename T>
    class coords3D_c:virtual public coords2D_c
    {
    	T z;
    public:
    	coords3D_c():coords2D_c()
    	{
    		z=0;
    	}
    	//ConversionConstructor
    	coords3D_c(coords2D_c coords,T z)
    	{
    		x=coords.x;
    		y=coords.y;
    		this.z=z;
    	}
    	coords3D_c operator+(coords3D_c coords)
    	{
    		coords3D_c sum;
    		coords2D_c.operator+(coords2D_c(coords));
    		sum.z=z+coords.z;
    		return (sum);
    	}
    	coords3D_c operator-(coords3D_c coords)
    	{
    		coords3D_c diff;
    		coords2D_c.operator-(coords2D_c(coords));
    		diff.z=z-coords.z;
    		return (diff);
    	}
    };
    

    :\daten\gramming\cpp\myprojects\mytest1.8\basics.h(75) : error C2629: 'class coords2D_c<T> (' unerwartet
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(95) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'coords2D_c<T>'
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(75) : error C2334: Unerwartete(s) Token vor '{'; sichtbarer Funktionsrumpf wird übersprungen
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(95) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'coords2D_c<T>'
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(80) : error C2061: Syntaxfehler : Bezeichner 'coords3D_c'
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(95) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'coords2D_c<T>'
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(87) : error C2061: Syntaxfehler : Bezeichner 'coords3D_c'
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(95) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'coords2D_c<T>'
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(100) : error C2955: 'coords2D_c' : Fuer die Verwendung einer Vorlagenklasse ist eine Vorlagen-Argumentliste erforderlich
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(95) : Siehe Deklaration von 'coords2D_c'
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(130) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'coords3D_c<T>'
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(100) : error C2955: 'coords2D_c' : Fuer die Verwendung einer Vorlagenklasse ist eine Vorlagen-Argumentliste erforderlich
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(95) : Siehe Deklaration von 'coords2D_c'
    c:\daten\gramming\cpp\myprojects\mytest1.8\basicspriteengine.h(108) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'coords3D_c<float>'
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(130) : fatal error C1903: Weiterverarbeitung nach vorhergehendem Fehler nicht moeglich; Kompilierung wird abgebrochen.
    c:\daten\gramming\cpp\myprojects\mytest1.8\basicspriteengine.h(108) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'coords3D_c<float>'
    Game.cpp
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(75) : error C2629: 'class coords2D_c<T> (' unerwartet
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(95) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'coords2D_c<T>'
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(75) : error C2334: Unerwartete(s) Token vor '{'; sichtbarer Funktionsrumpf wird übersprungen
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(95) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'coords2D_c<T>'
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(80) : error C2061: Syntaxfehler : Bezeichner 'coords3D_c'
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(95) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'coords2D_c<T>'
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(87) : error C2061: Syntaxfehler : Bezeichner 'coords3D_c'
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(95) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'coords2D_c<T>'
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(100) : error C2955: 'coords2D_c' : Fuer die Verwendung einer Vorlagenklasse ist eine Vorlagen-Argumentliste erforderlich
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(95) : Siehe Deklaration von 'coords2D_c'
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(130) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'coords3D_c<T>'
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(100) : error C2955: 'coords2D_c' : Fuer die Verwendung einer Vorlagenklasse ist eine Vorlagen-Argumentliste erforderlich
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(95) : Siehe Deklaration von 'coords2D_c'
    c:\daten\gramming\cpp\myprojects\mytest1.8\basicspriteengine.h(108) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'coords3D_c<float>'
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(130) : fatal error C1903: Weiterverarbeitung nach vorhergehendem Fehler nicht moeglich; Kompilierung wird abgebrochen.
    c:\daten\gramming\cpp\myprojects\mytest1.8\basicspriteengine.h(108) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'coords3D_c<float>'
    mytest-deffinitions.cpp
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(75) : error C2629: 'class coords2D_c<T> (' unerwartet
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(95) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'coords2D_c<T>'
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(75) : error C2334: Unerwartete(s) Token vor '{'; sichtbarer Funktionsrumpf wird übersprungen
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(95) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'coords2D_c<T>'
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(80) : error C2061: Syntaxfehler : Bezeichner 'coords3D_c'
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(95) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'coords2D_c<T>'
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(87) : error C2061: Syntaxfehler : Bezeichner 'coords3D_c'
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(95) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'coords2D_c<T>'
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(100) : error C2955: 'coords2D_c' : Fuer die Verwendung einer Vorlagenklasse ist eine Vorlagen-Argumentliste erforderlich
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(95) : Siehe Deklaration von 'coords2D_c'
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(130) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'coords3D_c<T>'
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(100) : error C2955: 'coords2D_c' : Fuer die Verwendung einer Vorlagenklasse ist eine Vorlagen-Argumentliste erforderlich
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(95) : Siehe Deklaration von 'coords2D_c'
    c:\daten\gramming\cpp\myprojects\mytest1.8\basicspriteengine.h(108) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'coords3D_c<float>'
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(130) : fatal error C1903: Weiterverarbeitung nach vorhergehendem Fehler nicht moeglich; Kompilierung wird abgebrochen.
    c:\daten\gramming\cpp\myprojects\mytest1.8\basicspriteengine.h(108) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'coords3D_c<float>'
    RasterGameEngine.cpp
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(75) : error C2629: 'class coords2D_c<T> (' unerwartet
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(95) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'coords2D_c<T>'
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(75) : error C2334: Unerwartete(s) Token vor '{'; sichtbarer Funktionsrumpf wird übersprungen
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(95) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'coords2D_c<T>'
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(80) : error C2061: Syntaxfehler : Bezeichner 'coords3D_c'
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(95) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'coords2D_c<T>'
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(87) : error C2061: Syntaxfehler : Bezeichner 'coords3D_c'
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(95) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'coords2D_c<T>'
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(100) : error C2955: 'coords2D_c' : Fuer die Verwendung einer Vorlagenklasse ist eine Vorlagen-Argumentliste erforderlich
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(95) : Siehe Deklaration von 'coords2D_c'
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(130) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'coords3D_c<T>'
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(100) : error C2955: 'coords2D_c' : Fuer die Verwendung einer Vorlagenklasse ist eine Vorlagen-Argumentliste erforderlich
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(95) : Siehe Deklaration von 'coords2D_c'
    c:\daten\gramming\cpp\myprojects\mytest1.8\basicspriteengine.h(108) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'coords3D_c<float>'
    c:\daten\gramming\cpp\myprojects\mytest1.8\basics.h(130) : fatal error C1903: Weiterverarbeitung nach vorhergehendem Fehler nicht moeglich; Kompilierung wird abgebrochen.
    c:\daten\gramming\cpp\myprojects\mytest1.8\basicspriteengine.h(108) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'coords3D_c<float>'
    Fehler beim Ausführen von cl.exe.

    mytest.exe - 28 Fehler, 0 Warnung(en)



  • lukas s schrieb:

    hi,
    ich bekomme mit diesen beiden Klassen
    jede menge Fehler (weiter unten)

    Nach hunderten von Änderungen kompiliert hier das folgende:

    g++ -c lukas.C

    template <typename T> class coords3D_c;
    
    template<typename T>
     class coords2D_c
     {
         T x,y;
     public:
         coords2D_c()
         {
             x=0;
             y=0;
         }
         //ConversionConstructor
         coords2D_c(coords3D_c<T> coords)
         {
             x=coords.x;
             y=coords.y;
         }
         coords2D_c operator+(coords3D_c<T> coords)
         {
             coords3D_c<T> sum;
             sum.x=x+coords.x;
             sum.y=y+coords.y;
             return (sum);
         }
         coords2D_c operator-(coords3D_c<T> coords)
         {
             coords3D_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>
     {
         T z;
     public:
         coords3D_c(): coords2D_c<T>()
         {
             z=0;
         }
         //ConversionConstructor
         coords3D_c(coords2D_c<T> coords,T z)
         {
             this->x=coords.x;
             this->y=coords.y;
             this.z=z;
         }
         coords3D_c 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);
         }
         coords3D_c 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);
         }
     };
    


  • uups da hab ich wohl die <T> vergessen
    jetzt funktioniert's
    danke für die mühe
    aber du hattest mir ja nicht gleich alles ausbessern müssen 🙂

    tschao
    lukas


Anmelden zum Antworten