模板类构造函数

sch*_*eda 13 c++ templates class

好的......我上课了

#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;

     . . .
};
Run Code Online (Sandbox Code Playgroud)

然后在我的.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);
}
Run Code Online (Sandbox Code Playgroud)

我的主要功能:

int main() {    
    BinarySearchTree<int> obj1;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我得到以下链接错误:

public: __thiscall BinarySearchTree<int,struct std::less<int>>::BinarySearchTree<int,struct std::less<int> >(void)
Run Code Online (Sandbox Code Playgroud)

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

Ral*_*zky 23

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

  • 我希望在所有C++教程网站上都能看到这一点. (3认同)