C++ 模板类构造函数

C++ 模板类构造函数,c++,class,templates,C++,Class,Templates,好的,伙计们。。。 我有以下课程 #include <functional> template <typename TValue, typename TPred = std::less<TValue>> class BinarySearchTree { struct TNode { TValue value; TNode *pLeft; TNode *pRight; }; public:

好的,伙计们。。。 我有以下课程

#include <functional>

template <typename TValue, typename TPred = std::less<TValue>>
class BinarySearchTree {
    struct TNode {
        TValue value;
        TNode *pLeft;
        TNode *pRight;
    };
public:
    BinarySearchTree();
    ~BinarySearchTree();

    . . .
private:
    TNode *pRoot;

     . . .
};
#包括
模板
类二进制搜索树{
结构节点{
t价值;
TNode*pLeft;
TNode*pRight;
};
公众:
二进制搜索树();
~BinarySearchTree();
. . .
私人:
TNode*pRoot;
. . .
};
然后在我的.cpp文件中,我定义了ctor/dtor,如下所示:

template <typename TValue, typename TPred>
BinarySearchTree<TValue, TPred>::BinarySearchTree() : pRoot(0) {}

template <typename TValue, typename TPred>
BinarySearchTree<TValue, TPred>::~BinarySearchTree() {
    Flush(pRoot);
}
模板
BinarySearchTree::BinarySearchTree():pRoot(0){}
模板
BinarySearchTree::~BinarySearchTree(){
冲洗(pRoot);
}
我的主要职能是:

int main() {    
    BinarySearchTree<int> obj1;
    return 0;
}
int main(){
二元搜索树obj1;
返回0;
}
我得到以下链接错误:

public: __thiscall BinarySearchTree<int,struct std::less<int>>::BinarySearchTree<int,struct std::less<int> >(void)
public:\uu thiscall BinarySearchTree::BinarySearchTree(void)

我尝试将构造函数定义放入头文件,但没有得到任何错误。仅当我尝试在cpp文件中定义它时。

最后请留下空间并尝试。 它可能被视为左移操作员

template <typename TValue, typename TPred = std::less<TValue> >
模板

不要在cpp文件中定义模板,而是将函数的实现放在头文件中,保持主函数不变。默认情况下,模板是内联的。因此,它们对链接器不可见。并且包含main()的文件无法查看模板的定义。因此出现了错误

你的问题的答案是:对不起,关闭的错误链接在C++ 11中不允许在<>代码> >代码>之间添加空间。我希望这在所有C++教程网站上更为明显。