我做错了什么?
template<class T>
class Binder
{
public:
static std::vector< Binder< T >* > all;
Node<T>* from;
Node<T>* to;
Binder(Node<T>* fnode, Node<T>* tonode)
{
from = fnode;
to = tonode;
Binder<T>::all.push_back(this);
}
};
std::vector<Binder<int>*> Binder<int>::all = std::vector< Binder<int>* >(); //here it is
谢谢。
答案 0 :(得分:7)
静态成员的定义被编译器解释为专门化(实际上, 是一种特殊化:您正在给出一个特定于T = int
的声明)。这可以通过在定义之前添加template<>
来解决。
在模板中定义静态成员有点令人失望:静态成员需要在标题之外定义,只有在您已经知道绑定器的所有可能T
时才可以这样做。
例如,现在您正在为T=int
定义它。现在,如果你开始在某处使用Binder<double>
,那么静态成员将是一个未定义的引用。