Конструктор класса шаблона

Хорошо, ребята... У меня следующий класс

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

Ответ 1

Не указывайте шаблоны в файле cpp, но поместите реализацию функций в файл заголовка и оставите свою основную функцию такой, какой она есть. Шаблоны устанавливаются по умолчанию. Поэтому они не видны компоновщику. И файл, содержащий main(), не может видеть определение шаблонов. Отсюда и ошибка.

Ответ 2

наконец оставить пробел и попробуйте. это может быть принято как оператор сдвига слева!

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