0

我会尽量保持代码简短。

我正在尝试使用模板制作二进制搜索树(简称BST )。

在我的添加功能中,我遇到了一个错误,我确定我以某种方式滥用了模板

由于模板,所有这些代码都在一个 .h(头文件)文件中。

编辑: const 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);     // key, data
    bool add (int, Type);
};

添加功能:

template <typename Type>
bool BSTNode<Type>::add(int newKey, Type newData) {
  if (newKey < this->key) {
    if (left == NULL) {
      this->left = new BSTNode<Type>(int newKey, Type newData);
    }
  } else {
    this->right = new BSTNode<Type>(int newKey, Type newData);
  }
  return false;
}

这是我得到错误的地方:

this->left = new BSTNode<Type>(int newKey, Type newData);

int 之前的预期主表达式

4

3 回答 3

2

您不是专门滥用模板,而是滥用参数!

this->left = new BSTNode<Type>(int newKey, Type newData); 

应该看起来更像

this->left = new BSTNode<Type>(newKey, newData); 
于 2012-06-13T09:55:57.367 回答
1

它应该this->left = new BSTNode<Type>(newKey, newData);没有任何类型。

于 2012-06-13T09:55:33.580 回答
1

错误很明显:

 bool add (int, Type);

对比

 bool add(int newKey, const Type &newData)

您应该将类​​定义中的声明更改为:

 bool add (int, const Type&);

并从语句中删除类型:

 this->right = new BSTNode<Type>(int newKey, Type newData);
 this->right = new BSTNode<Type>(int newKey, Type newData);

应该

 this->right = new BSTNode<Type>(newKey, newData);
 this->right = new BSTNode<Type>(newKey, newData);
于 2012-06-13T09:56:12.490 回答