Ich nehme an das du die Definition in eine cpp geschrieben hast. Das kann nicht klappen, da ein Funktionstemplate erst dann zu einer echten Funktion wird, wenn man dem Templateparameter einen Komkreten Typ angibt.
|
Quellcode
|
1
2
|
// Also z.B. so
SafeRelease(&g_pD3DDevice);
|
Der Typ für den Templateparameter ist dann IDirect3DDevice9*. Der Compiler erstellt dann eine Funktion die so aussieht
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
|
FEExport FEResult FESafeRelease(IDirect3DDevice9**PointerToRelease)
{
if(*PointerToRelease != NULL)
{
*PointerToRelease->Release();
PointerToRelease = NULL;
}
else
return FEError;
return FEOk;
}
|
Damit der Compiler das auch machen kann, muss er die Definition haben. Daher müssen templates immer in einer Header Definiert werden. Das liegt einfach daran das jede cpp Datei für sich Kompiliert wird. Ein Prototyp ist daher auch nett unbedingt nötig.
PS: Mir ist da grad ein kleiner Fehler aufgefallen. Es soll doch bestimmt heißen *PointerToRelease = NULL und nicht PointerToRelease = NULL.