我有以下代码(it's on ideone.com):

template<class T>
class CMemoryPool
{
public:
    CMemoryPool(int param1)
        : stuff(param1)
    {}

private:
    T stuff;
};

template<class T>
class CList
{
public:
    struct Entry
    {
        T data;
    };

    static CMemoryPool<Entry> s_pool;
};

template<class T>
CList<T>::CMemoryPool<CList<T>::Entry>::s_pool(1);

int main()
{
    CList<int> list;
}


我似乎无法在类之外进行s_pool的初始化以进行编译。谁能帮我弄清楚如何进行这项工作?注意我仅使用C ++ 03。

最佳答案

编辑:
我的印象是:


  您必须为模板的每个实例显式地将值赋予静态值:

CList<int>::CMemoryPool<CList<int>::Entry>::s_pool(1);

  
  必须在您的* .C文件中的某处...
  
  或者,在用于获取值的表的方法中使用静态局部变量。


但是玩了一点之后,这似乎可以在ideone中编译

template<class T>
CMemoryPool<typename CList<T>::Entry> CList<T>::s_pool(1);


我仍然推荐@FredOverflow解决方案,因为它可以保护您免受static initialization problems

07-24 14:35