Visual Studio 2017 Fehler C2244 (gelöst)



  • Ich möchte einfach eine vector2d Klasse machen, weil ich gerade mit der Spieleentwicklung einsteige.
    Das ist einfach ein Container, um einen x- und einen y-Wert aufzubewahren.

    vector2d.h

    #pragma once
    template <typename T>
    struct vector2d
    {
    	template <typename T>
    	vector2d(T, T);
    
    	T x, y;
    };
    

    vector2d.cpp

    #include "vector2d.h"
    
    template <typename T>
    vector2d<T>::vector2d(T _x, T _y)
    {
    	x = _x;
    	y = _y;
    }
    

    Der Compiler spuckt mir folgende Meldungen aus:

    1>vector2d.cpp(5): error C2244: "vector2d<T>::vector2d": Keine Übereinstimmung für Funktionsdefinition mit vorhandener Deklaration gefunden
    1>vector2d.cpp(4): note: Siehe Deklaration von "vector2d<T>::vector2d"
    1>vector2d.cpp(5): note: Definition
    1>vector2d.cpp(5): note: 'vector2d<T>::vector2d(T,T)'
    1>vector2d.cpp(5): note: Vorhandene Deklarationen
    1>vector2d.cpp(5): note: 'vector2d<T>::vector2d(T,T)'
    

    Daraus werde ich aber nicht besonders schlau und aus Google auch nicht. 😞



  • Warum gibt’s da zweimal template? Das T des Parameters entspricht doch wohl dem Anderen.

    Templates werden (im Regelfall) im Header definiert. Da du dich nicht auskennst, halte dich daran.



  • Danke, schon funktioniert es. Ich wusste gar nicht, dass man das auch im Header definieren kann. Cool 🙂


Anmelden zum Antworten