Template class constructor
本问题已经有最佳答案,请猛点这里访问。
好吧,伙计们…我有下课
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #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,如下所示:
1 2 3 4 5 6 7 | template <typename TValue, typename TPred> BinarySearchTree<TValue, TPred>::BinarySearchTree() : pRoot(0) {} template <typename TValue, typename TPred> BinarySearchTree<TValue, TPred>::~BinarySearchTree() { Flush(pRoot); } |
我的主要功能:
1 2 3 4 | int main() { BinarySearchTree<int> obj1; return 0; } |
我得到以下链接错误:
1 | public: __thiscall BinarySearchTree<int,struct std::less<int>>::BinarySearchTree<int,struct std::less<int> >(void) |
我试图将构造函数定义放入头文件中,但没有得到任何错误。只有当我试图在cpp文件中定义它时。
不要在cpp文件中定义模板,而是将函数的实现放在头文件中,并保持主函数不变。默认情况下,模板是内联的。因此它们对链接器不可见。并且包含main()的文件看不到模板的定义。因此出现了错误。
最后留点空间试试。可能是左移操作!
1 | template <typename TValue, typename TPred = std::less<TValue> > |