Templates als rückgabewert?



  • was soll außerdem T* out = NULL bezwecken?
    T is ja der rückgabe typ!

    cu



  • was das bezwecken soll? Hm nachdenken?

    Wie wäre es so?:

    vector2d<float> x;
    matrix<float> y;
    float value = 0;
    
    vector2d<float> blabla = vectorTransformCoords (x, y, &value); // 3. Parameter in value kopieren
    vector2d<float> blubblub = vectorTransformCoords (x, y) // Defaultparameter beim 3. Parameter
    

    Und was result fürn typ ist kannste dir ja denken! ein vector2d<T>

    Ich glaub du hast meinen Kommentar da drin nicht gelesen.

    Wie kann ich diesen Fehler beheben?



  • Afaik ist der Code korrekt. Welchen Compiler benutzt du denn?



  • VC7.0



  • habs nicht probiert aber versuchs mal so

    template<typename T> 
    vector2d<T> vectorTransformCoords (
        const vector2d<T>& _vector, 
        const matrix<T>& _matrix, 
        T& out = NULL)
    {
       //
    }
    
    //Aufruf
    vector2d<float> bla = vectorTransformCoords (x, y, value);
    

    PS: wieso definierst du die funktion inline, du sagst ja es wird viel code darin abgearbeitet



  • Ich hab den Fehler! Warn total blöder auf den ich nicht gekommen bin!

    Ich hab von der Funktion vorher einen Prototypen gemacht:

    // Prototyp
    template<typename T> inline vector2d<T> vectorTransformCoords (const vector2d<T>& _vector, const matrix<T>& _matrix, T* out = NULL)
    
    // Implementierung
    template<typename T> inline vector2d<T> vectorTransformCoords (const vector2d<T>& _vector, const matrix<T>& _matrix, T* out)
    {
        // siehe oben
    }
    

    ich hatte den Defaultparameter bei dem Prototypen angegeben und nicht bei der Implementierung!

    wenn ich nun folgendes mache:

    // Prototyp
    template<typename T> inline vector2d<T> vectorTransformCoords (const vector2d<T>& _vector, const matrix<T>& _matrix, T* out = NULL)
    
    // Implementierung
    template<typename T> inline vector2d<T> vectorTransformCoords (const vector2d<T>& _vector, const matrix<T>& _matrix, T* out = NULL)
    {
        // siehe oben
    }
    

    läuft alles perfekt! Wieso muss ich nun bei Prototyp und implementierungen NULL angeben damit es klappt?



  • normalerweise muss man nur bei der deklaration den default parameter angeben also beim prototyp,
    bist du sicher das es ohne default parameter bei der definition der funktion nicht klappt wäre was neues für mich



  • 100%ig sicher, ich habs ca. 25x versucht! immer selbes ergebnis



  • Könnte sein, dass dein Compiler sich dort nicht richtig verhält, der MSC 7.0 ist ja nicht viel mehr als ein aufgebohrter 6.0.



  • groovemaster schrieb:

    Könnte sein, dass dein Compiler sich dort nicht richtig verhält, der MSC 7.0 ist ja nicht viel mehr als ein aufgebohrter 6.0.

    What are you talking about?

    MfG SideWinder



  • 😕


Anmelden zum Antworten