我究竟做错了什么?

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

谢谢你。

最佳答案

静态成员的定义由编译器解释为一种特殊化(实际上,这是一种特殊化:您要提供一个特定于T = int的声明)。可以通过在定义之前添加template<>来解决此问题。

在模板中定义静态成员有点麻烦:静态成员需要在 header 之外定义,只有在您已经知道绑定(bind)器所有可能的T的情况下,这才是可能的。

例如,现在您正在为T=int定义它。现在,如果您开始在某处使用Binder<double>,则静态成员将是 undefined reference 。

关于C++:特殊成员需要«template <>»语法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12525012/

10-11 00:35