1
    template <class T>
    class BTree
    {
    private:
        T Data;
        BTree* Right;
        BTree* Left;
    public:
        BTree();
        BTree(T);
        ~BTree();
        void SetData(T);
        T GetData();
        void SetRight(BTree*);
        BTree* GetRight();
        void SetLeft(BTree*);
        BTree* GetLeft();
    };

これは非メンバー関数テンプレートを宣言する方法ですか?私はこれらの定義について真剣に疑問を持っています。

    template <class T>
    BTree<T>* NewNode();
    template <class T>
    BTree<T>* NewNode(T);

この下は機能しません!! 私にエラーを与える

template <class T>
BTree<T>* NewNode()
{
    BTree<T>* Node=new BTree<T>;
    return Node;
}

    template <class T=int>
    //template <class BTree>
    BTree<T>* NewNode(T Num)
    {
        BTree<T>* Node=new BTree<T>(Num);
        return Node;
    }


    int main()
    {

        BTree<int>* Root=NULL;
        Root=NewNode(1); //it says undefined reference.
        Root->SetLeft(NewNode(2));
        Root->SetRight(NewNode(3));
        return 0;
    }

エラーは次のとおりです。

1.undefined reference to `BTree<int>* NewNode<int>(int)'
2.undefined reference to `BTree<int>::SetLeft(BTree<int>*)'
3.undefined reference to `BTree<int>::SetRight(BTree<int>*)'
4

0 に答える 0