This question already has answers here:
Why can templates only be implemented in the header file?
(16个回答)
5年前关闭。
我正在尝试创建一个池来管理小游戏对象的分配等,这些对象很快就会死掉并重生。
为此,我创建了一个池:
问题是我收到未解决的外部符号。池被放置为类的静态成员:
这是错误:
(16个回答)
5年前关闭。
我正在尝试创建一个池来管理小游戏对象的分配等,这些对象很快就会死掉并重生。
为此,我创建了一个池:
template <class T>
class Pool {
public:
T* obtain()
{
T* obj = 0;
if (_avaibles.size() > 0)
{
std::vector<T*>::iterator it = _avaibles.begin();
obj = *it;
_avaibles.erase(it);
}
else
obj = new T();
return obj;
}
void free(T* obj)
{
_avaibles.push_back(obj);
}
void clear()
{
std::vector<T*>::iterator it = _avaibles.begin();
while (it != _avaibles.end())
{
T act = *it;
delete act;
++it;
}
}
private:
std::vector<T*> _avaibles;
};
问题是我收到未解决的外部符号。池被放置为类的静态成员:
static Pool<Ship> _shipPool;
这是错误:
Error 16 error LNK2001: unresolved external symbol "private:
static class Pool<class Ship> Asdf::_shipPool"
(?_shipPool@Asdf@@0V?$Pool@VShip@@@@A) C:\-\Asdf.obj
最佳答案
您不能像这样拆分模板。将实现放入.hpp
文件中,所有内容都会显示出来。
有关更多信息,请参考Why can templates only be implemented in the header file?。
关于c++ - 实现内存管理模板类时,未解析的外部符号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21814118/
10-12 22:17