c++ - 使用模板构造函数创建模板类对象

标签 c++ class templates constructor

我在从模板类创建类对象时遇到问题,我需要构造函数也是模板并在创建对象时接受参数。但是,当我尝试创建该对象时,我收到一条错误消息,指出我正在引用不存在的内容。

这是我的代码:

using namespace std;
#include <cstdlib>

template <class Node_Type>
class BinaryTree 
{
public:
    BinaryTree(Node_Type);
    BinaryTree(Node_Type, Node_Type);
    BinaryTree(Node_Type, Node_Type, Node_Type);
    bool isEmpty();
    Node_Type info();
    Node_Type inOrder();
    Node_Type preOrder();
    Node_Type postOrder();


private:
    struct Tree_Node
{
    Node_Type Node_Info;
    BinaryTree<Node_Type> *left;
    BinaryTree<Node_Type> *right;
};

Tree_Node *root;

};

#endif

和我的.cpp:

template <class Node_Type>
BinaryTree<Node_Type>::BinaryTree(Node_Type rootNode) {

    root = rootNode;
    root->left = NULL;
    root->right = NULL;

}

.cpp 还有更多内容,但只是其他不相关的函数成员。我上面显示的构造函数是我无法开始工作的。

在我的主体中,我试图通过以下调用声明我的对象:

BinaryTree<char> node('a');

但是当我尝试这样做时,我收到一条错误消息:

undefined reference to `BinaryTree<char>::BinaryTree(char)'

这两天我一直在努力解决这个问题。我在谷歌上搜索了我能想到的每个主题,并在没有帮助的情况下阅读了 Stack Overflow 和其他来源的无数示例。谁能解释一下我的问题是什么?我知道如何做我的项目,如果 C++ 中的语法不是那么荒谬的话,我现在已经完成了。提前致谢!

最佳答案

模板代码在实例化时应该是可见的,这意味着函数的定义也必须在标题中。

关于c++ - 使用模板构造函数创建模板类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18880700/

相关文章:

python - 调用嵌入式Qt的.dll函数

c++ - 继承构造函数并提供新的重载 : no arguments base constructor seems to not participate in overload resolution

c++ - std::vector 不保留数据?

Java 类 - 当我读到部门时主要不编译

c++ - C++ 中的加权方差和加权标准差

c++ - 一个函数可以同时接受迭代器和反向迭代器作为参数吗

c++ - 读取 64 位整数文件

javascript - 如何在 JavaScript 中声明父类和子类?

ios - 带有 UIButtons 的下拉列表的 UIView 类 - 委托(delegate)/协议(protocol)问题?

c++ - 不明确的重载 - 带有参数包的部分函数模板排序