gpt4 book ai didi

c++ - 对已定义方法的 undefined reference , header 中的声明与源匹配

转载 作者:行者123 更新时间:2023-11-28 07:57:04 25 4
gpt4 key购买 nike

我在类的公共(public)区域声明了以下方法:

在头文件中:

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 类的其他函数并且运行良好的其他代码。

我还尝试使用常规指针、引用甚至按值传递来重写函数,结果相同。

最佳答案

模板方法/函数必须在 header 本身中定义(除非方法的类本身在源文件中定义)。模板类的所有方法也是如此(即使这些方法本身不是模板方法)。

大多数人甚至懒得在类定义下面定义它们,他们只是在类中内联定义它们:

class EntityManager 
{
public:
...
template <typename ComponentType>
bool addComponentToEntity(const Entity in_Entity, const shared_ptr<ComponentType> in_ComponentInstance)
{
...
}
...

}

关于c++ - 对已定义方法的 undefined reference , header 中的声明与源匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12469630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com