Generics visualc&x2B+;带有类的泛型模板

Generics visualc&x2B+;带有类的泛型模板,generics,visual-c++,Generics,Visual C++,我试图声明一个泛型函数,它返回一个结构(泛型)。我似乎只能找到人们为此使用原始数据类型的例子。我现在没有抛出任何VisualStudio错误,直到我尝试编译,然后我得到LINK2019:unresolved external symbol 下面是我的代码: 我的头文件(ShaderUtilities.h)具有以下定义: class ShaderUtilities { public: ShaderUtilities(); ~ShaderUtilities(); templa

我试图声明一个泛型函数,它返回一个结构(泛型)。我似乎只能找到人们为此使用原始数据类型的例子。我现在没有抛出任何VisualStudio错误,直到我尝试编译,然后我得到LINK2019:unresolved external symbol

下面是我的代码:

我的头文件(ShaderUtilities.h)具有以下定义:

class ShaderUtilities
{
public:
    ShaderUtilities();
    ~ShaderUtilities();
    template <typename T>
    static T* LoadShader(char*, ID3D11Device*);
};
类ShaderUtilities
{
公众:
ShaderUtilities();
~ShaderUtilities();
模板
静态T*LoadShader(char*,ID3D11Device*);
};
我的类(ShaderUtilities.cpp)实现具有以下功能:

#include "ShaderUtilities.h"

ShaderUtilities::ShaderUtilities()
{}

ShaderUtilities::~ShaderUtilities()
{}

template <typename T>
static T* ShaderUtilities::LoadShader(char* shaderFileName, ID3D11Device* device)
{
    T* shader;

    //blah blah code here

    return shader;
}
#包括“ShaderUtilities.h”
ShaderUtilities::ShaderUtilities()
{}
ShaderUtilities::~ShaderUtilities()
{}
模板
静态T*ShaderUtilities::LoadShader(char*shaderFileName,ID3D11Device*device)
{
T*着色器;
//这是什么代码
返回着色器;
}
以上所有汇编均无问题;然而,当我试图调用它时,我得到了上面的编译器错误。我这样称呼它:

ID3D11VertexShader* shader = ShaderUtilities::LoadShader<ID3D11VertexShader>((char*)"ColorVertexShader", m_Device);
ID3D11VertexShader*shader=ShaderUtilities::LoadShader((char*)“ColorVertexShader”,m_设备);

有人知道我做错了什么吗?提前谢谢!!欢迎任何建议

模板函数的实现必须在标头中。编译器需要在使用时查看它。@IgorTandetnik感谢您的回复。在上面的问题中,我向头/cpp文件添加了更多代码。你能给我举个例子说明你的意思吗?再次感谢!!我的意思是,
ShaderUtilities::LoadShader
的实际实现,而不仅仅是声明,必须从
ShaderUtilities.cpp
@IgorTandetnik移动到
ShaderUtilities.h
,好的,我会试试。非常感谢你回复我,我真的很感激!这就解决了,再次谢谢你!!你能添加你的评论作为回复吗?这样我就可以相信你的回答了?谢谢