C++ 模板类的非成员函数模板 模板 B类树 { 私人: T数据; b树*对; b树*左; 公众: b树(); BTree(T); ~b树(); 无效设置数据(T); T GetData(); 无效设定权(BTree*); BTree*GetRight(); void SetLeft(b树*); BTree*GetLeft(); };

C++ 模板类的非成员函数模板 模板 B类树 { 私人: T数据; b树*对; b树*左; 公众: b树(); BTree(T); ~b树(); 无效设置数据(T); T GetData(); 无效设定权(BTree*); BTree*GetRight(); void SetLeft(b树*); BTree*GetLeft(); };,c++,C++,这是声明非成员函数模板的方法吗?我对这些定义有严重的怀疑 template <class T> class BTree { private: T Data; BTree* Right; BTree* Left; public: BTree(); BTree(T); ~BTree(); void SetData(T);

这是声明非成员函数模板的方法吗?我对这些定义有严重的怀疑

    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();
    };
模板
BTree*NewNode();
模板
BTree*NewNode(T);
下面这个不行!!给我一个错误

    template <class T>
    BTree<T>* NewNode();
    template <class T>
    BTree<T>* NewNode(T);
模板
BTree*NewNode()
{
BTree*Node=新的BTree;
返回节点;
}
模板
//模板
BTree*NewNode(T Num)
{
BTree*Node=新的BTree(Num);
返回节点;
}
int main()
{
BTree*Root=NULL;
Root=NewNode(1);//表示未定义的引用。
Root->SetLeft(NewNode(2));
Root->SetRight(NewNode(3));
返回0;
}
错误如下所示:

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.BTree*NewNode(int)的未定义引用
2.对“BTree::SetLeft(BTree*)”的未定义引用
3.对“BTree::SetRight(BTree*)”的未定义引用

一旦我提供了所使用的
BTree
方法的定义。可能的重复是链接器错误,而不是编译器错误。请参阅n.m.的链接,了解原因和如何修复它。您的声明很好。谢谢您的回复。一旦我定义了头文件中的所有内容,它就工作了。
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>*)'