gpt4 book ai didi

c++ - 模板类的链接器错误

转载 作者:行者123 更新时间:2023-11-30 03:06:22 25 4
gpt4 key购买 nike

我正在尝试使用我的自定义模板链表类实现粒子系统并出现链接器错误:

Error   3   error LNK2019: unresolved external symbol "public: struct Node<class Particle> * __thiscall LinkedList<class Particle>::Pop(void)" (?Pop@?$LinkedList@VParticle@@@@QAEPAU?$Node@VParticle@@@@XZ) referenced in function "private: void __thiscall ParticleEmitter::addParticles(void)" (?addParticles@ParticleEmitter@@AAEXXZ)*

这是 Node.h:

template <class T>
struct Node
{
Node(const T&);
~Node();
T* value;
Node* previous;
Node* next;
};

这是添加粒子的代码:

LinkedList<Particle> freeParticles; //definition in ParticleEmitter.h

void ParticleEmitter::addParticles(void)
{
int numParticles = RandomGetInt(minParticles, maxParticles);

for (int i = 0; i < numParticles && !freeParticles.IsEmpty(); i++)
{
// grab a particle from the freeParticles queue, and Initialize it.

Node<Particle> *n = freeParticles.Pop();
n->value->init(color,
position,
direction * RandomGetFloat(velMin, velMax),
RandomGetFloat(lifetimeMin, lifetimeMax));
}

}

这里是 Pop 函数:

//Pop from back
template <class T>
Node<T>* LinkedList<T>::Pop()
{
if (IsEmpty()) return NULL;

Node<T>* node = last;
last = last->previous;

if (last != NULL)
{
last->next = NULL;
if (last->previous == NULL) head = last;
}
else head = NULL;

node->previous = NULL;
node->next = NULL;

return node;
}

我正在从头开始编写所有代码,所以可能我在某处犯了错误,而且我也是模板的新手。

最佳答案

您是否在源文件(例如 .cpp)而不是头文件中定义了 Pop 函数?你不能用模板那样做。您需要在头文件中提供函数定义。定义需要在实例化时可见。

关于c++ - 模板类的链接器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6725617/

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