This question already has answers here:
Why can templates only be implemented in the header file?
                                
                                    (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