【问题标题】:Template class constructor [duplicate]模板类构造函数[重复]
【发布时间】:2013-05-30 00:28:47
【问题描述】:

好吧,伙计们... 我有以下课程

#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 文件中定义它时。

【问题讨论】:

  • 您的问题的答案是here - 抱歉,关闭投票中的链接错误

标签: c++ class templates


【解决方案1】:

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

【讨论】:

  • 我希望这在所有 C++ 教程网站上都能看到。
【解决方案2】:

最后留点空间试试。 它可能被视为左移运算符!

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

【讨论】:

  • 自 C++11 起,&gt;&gt; 之间不加空格是可以的。
猜你喜欢
  • 2015-09-30
  • 2016-03-22
  • 1970-01-01
  • 1970-01-01
  • 2011-05-24
  • 2016-04-13
  • 1970-01-01
  • 2014-02-05
  • 2015-12-08
相关资源
最近更新 更多