C++ 类模板中封闭类型的静态数组

C++ 类模板中封闭类型的静态数组,c++,C++,我正在尝试编译以下内容: template<typename T> class Foo { protected: static Foo<T>* pool[5]; public: static Foo* Bar() { pool[1] = new Foo(); } }; int main() { Foo<int>* b = new Foo<int>(); b->Bar(); } 模板 福班{ 受保护

我正在尝试编译以下内容:

template<typename T>
class Foo {
protected:
   static Foo<T>* pool[5];
public:
   static Foo* Bar() {
      pool[1] = new Foo();
   }
};

int main() {
   Foo<int>* b = new Foo<int>();
   b->Bar();
}
模板
福班{
受保护的:
静态Foo*池[5];
公众:
静态Foo*Bar(){
池[1]=新的Foo();
}
};
int main(){
Foo*b=新的Foo();
b->Bar();
}
我得到一个错误:

 undefined reference to `Foo<int>::pool'
对'Foo::pool'的未定义引用

如何定义池数组?

您可以在类之外定义模板类的静态成员,如下所示

// for generic T
template<typename T>
Foo<T>* Foo<T>::pool[5] = {0, 0, 0, 0, 0};

// specifically for int
template<>
Foo<int>* Foo<int>::pool[5] = {0, 0, 0, 0, 0};
//对于泛型T
模板
Foo*Foo::pool[5]={0,0,0,0,0};
//专门针对int
模板
Foo*Foo::pool[5]={0,0,0,0,0};

您可以像这样在类之外定义模板类的静态成员

// for generic T
template<typename T>
Foo<T>* Foo<T>::pool[5] = {0, 0, 0, 0, 0};

// specifically for int
template<>
Foo<int>* Foo<int>::pool[5] = {0, 0, 0, 0, 0};
//对于泛型T
模板
Foo*Foo::pool[5]={0,0,0,0,0};
//专门针对int
模板
Foo*Foo::pool[5]={0,0,0,0,0};

每天询问,与模板无关,并在常见问题解答中介绍。你的书中也应该有。必须定义静态成员。每天询问,与模板无关,常见问题解答中已介绍。你的书中也应该有。必须定义静态成员。