Problem mit Templateklasse als Rückgabetyp



  • Hi
    ich wollte eine Methoide schreiben,die einen Funktionsterm anhand von 2 Punkten feststellt und dann zurück gibt.
    Mein Problem ist,dass ich mein Programm einfach nicht kompiliert bekomm aufgrund irgendwelcher Fehler bei/in der Methode.

    Ich hoffe,dass mir jemand helfen kann.

    Grüße

    Deklaration

    template <typename Tm,typename Tb,typename Tfx> class LineareFunktion
    {
    	const Tm m;
    	const Tb b;
    
    	public:
    
    		template <typename Tm,typename Tb> class Funktionsterm
    		{
    			public:
    				const Tm m;
    				const Tb b;
    
    				Funktionsterm(Tm m,Tb b):m(m),b(b){};
    		};
    
    		class Funktionsterm<Tm,Tb> BerechneFunktionsterm(int x1,int y1,int x2,int y2);
    };
    

    Definition (irgendwie fehlerhaft^^)

    template<typename Tm,typename Tb>
    class Funktionsterm<Tm,Tb>  // Rückgabetyp
    LineareFunktion<Tm,Tb,Tfx>::BerechneFunktionsterm(int x1,int y1,int x2,int y2)
    {
        //.............. Berechnungen
        Tm m;
        Tb b;
    
        return Funktionsterm<Tm,Tb>(m,b);
    }
    


  • dgreztrtzrz schrieb:

    aufgrund irgendwelcher Fehler bei/in der Methode.

    (irgendwie fehlerhaft^^)

    gehts noch ein bisschen ungenauer?



  • 
    

    error C2143: Syntaxfehler: Es fehlt ';' vor 'LineareFunktion<Tm,Tb,Tfx>::BerechneFunktionsterm'
    error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    C1903: Weiterverarbeitung nach vorherigem Fehler nicht möglich; Kompilierung wird abgebrochen.

    [code]



  • dgreztrtzrz schrieb:

    ...

    Ein wenig Kommentiert und anders eingerückt... Aber zu faul um es im Compiler nachzuprüfen:

    template <typename Tm,typename Tb,typename Tfx> // Normalerweise bricht man hier um (Lesbarkeit)
    class LineareFunktion
    {
        const Tm m;
        const Tb b;
    
        public:
            template <typename Tm,typename Tb>
            class Funktionsterm
            {
                public:
                    const Tm m;
                    const Tb b;
    
                    Funktionsterm(Tm m, Tb b)
                    : m(m),
                      b(b)
                    {};
            };
    
            // Hier ist das class zuviel...
            class Funktionsterm<Tm,Tb> BerechneFunktionsterm(int x1,int y1,int x2,int y2);
    };
    
    // Dies muss noch im Header stehen (Template wegen)
    // Und ich tippe das es wie folgt aussehen muß:
    template<typename Tm,typename Tb,typename Tfx>   // Tfx gehört noch dazu
    LineareFunktion<Tm,Tb,Tfx>::Funktionsterm<Tm,Tb> // <-- Innere Klasse wegen
    LineareFunktion<Tm,Tb,Tfx>::BerechneFunktionsterm(int x1,int y1,int x2,int y2)
    {
    }
    

Anmelden zum Antworten