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

static メンバーの定義は、コンパイラによって特殊化として解釈されます (実際に、特殊化です: に固有の宣言を与えていますT = int)。template<>これは、定義の前に追加することで修正できます。

Tテンプレートで静的メンバーを定義するのは少し面倒です: 静的メンバーはヘッダーの外側で定義する必要があり、それはバインダーで可能なことをすべて知っている場合にのみ可能です。

たとえば、現在、 に対して定義していT=intます。ここで、Binder<double>どこかで使用を開始すると、静的メンバーは未定義の参照になります。

于 2012-09-21T06:06:07.843 に答える