我在这样的类的公共区域中声明了以下方法:
在头文件中:
class EntityManager
{
public:
...
template <typename ComponentType>
bool addComponentToEntity(const Entity in_Entity, const shared_ptr<ComponentType> in_ComponentInstance);
...
}
在源文件中:
template <typename ComponentType>
bool EntityManager::addComponentToEntity(const Entity in_Entity, const shared_ptr<ComponentType> in_ComponentInstance)
{
...
}
然后我尝试像这样使用它:
Entity l_Entity = 1;
shared_ptr<TestComponent> l_TestComponent(new TestComponent());
EntityManager* l_EntityManager = new EntityManager();
l_EntityManager->addComponentToEntity<TestComponent>(l_Entity, l_TestComponent);
这导致编译器抱怨:
undefined reference to `bool EntityManager::addComponentToEntity<TestComponent>(unsigned long, boost::shared_ptr<TestComponent>)'|
我知道这可能是因为我在 C++ 编程方面不是很有经验,但我看不出函数未定义的原因。我省略了一些调用 EntityManager 类的其他函数并且运行良好的其他代码。
我还尝试使用常规指针、引用甚至按值传递以相同的结果重写该函数。