关于c ++:Template类构造函数

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