c++ - 尝试使用模板创建类的新实例,出现意外错误

标签 c++ templates pointers binary-search-tree

尝试使用模板制作B二元S搜索T树(简称BST)。

当我尝试创建 BST 的新实例时,出现意外错误。我希望解决方案不涉及指针,因为我希望将它们保持在最低限度。

现在我有:

template <typename Type>
class BST {                 // The binary search tree containing nodes
private:
    BSTNode<Type> *root;    // Has reference to root node

public:
    BST ();
    bool add (int, Type);
};

节点类型:

编辑:当我删除代码以解除阻碍文本时,我忘记了构造函数,现在它已被添加

template <typename Type>
class BSTNode {    // Binary Search Tree nodes
private:
    int key;       // we search by key, no matter what type of data we have
    Type data;
    BSTNode *left;
    BSTNode *right;

public:
    BSTNode (int, Type&); 
    bool add (int, Type);
};

EDIT2:这是实际的构造函数

template <typename Type>
BSTNode<Type>::BSTNode (int initKey, Type &initData) {
     this->key = initKey;
     this->data = initData;
     this->left = NULL;
     this->right = NULL;
}

我想尝试并测试是否有任何工作/不工作

BSTNode<int> data = new BSTNode (key, 10);

然后我得到:BSTNode 之前的预期类型说明符。我不知道我做错了什么,但我希望的一件事是我不必使用数据作为指针。

BSTNode<int> data = new BSTNode<int> (key, 10);

也不行,好像信了< int >< & int>而且不匹配

最佳答案

首先,您需要在分配的 RHS 上完全指定类型,并且,因为您正在使用 new 实例化动态分配的节点, LHS 应该是一个指针:

BSTNode<int>* data = new BSTNode<int> (key, 10);
            ^                     ^

如果不需要节点指针,则使用

BSTNode<int> data(key, 10);

其次,你的BSTNode<T>类没有采用 int 和 Type 的构造函数,因此您也需要提供它。

template <typename Type>
class BSTNode {
 public:
  BSTNode(int k, const Type& val) : key(k), data(val), left(0), right(0) { .... }
};

关于c++ - 尝试使用模板创建类的新实例,出现意外错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11011676/

相关文章:

c++ - 比较不同大小的位域

c++ - 模板、通用容器和唯一容器,C++

c++ - 为什么 std::function 的初始化器必须是 CopyConstructible?

c++ - `const T* const` 是什么意思?

C++以最佳方式返回结构和 vector

c++ - 如何使用 tntdb 类更新 Sqlite 数据库中的字符串值

c++ - 选择期间的sqlite科学记数法

c++ - linux eclipse c++ 本地命名空间和 "std::"

python - 获取 HiddenField 的值并从模板插入它 - Flask

c - 基本 C 文件 I/O 程序的指针问题