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