5

我究竟做错了什么?

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

谢谢你。

4

1 回答 1

7

静态成员的定义被编译器解释为一种特化(实际上,它一种特化:您正在给出一个特定于 的声明T = int)。这可以通过template<>在定义之前添加来解决。

在模板中定义静态成员有点麻烦:静态成员需要在标头之外定义,并且只有在您已经知道所有可能T的活页夹时才有可能。

例如,现在您正在为T=int. 现在,如果你开始Binder<double>在某个地方使用,静态成员将是一个未定义的引用。

于 2012-09-21T06:06:07.843 回答