好的伙计...... 我有以下课程
#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;
. . .
};
然后在我的.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);
}
我的主要职能:
int main() {
BinarySearchTree<int> obj1;
return 0;
}
我得到以下链接错误:
public: __thiscall BinarySearchTree<int,struct std::less<int>>::BinarySearchTree<int,struct std::less<int> >(void)
我试图将构造函数定义放入头文件中,我没有得到任何错误。只有当我尝试在cpp文件中定义它时。
答案 0 :(得分:22)
不要在cpp文件中定义模板,而是将函数的实现放在头文件中,并保持主函数不变。默认情况下,模板会内联。因此,它们对链接器不可见。并且包含main()的文件无法看到模板的定义。因此错误。
答案 1 :(得分:0)
最后留空并尝试。 它可能被视为左移操作员!
template <typename TValue, typename TPred = std::less<TValue> >