Создание нового экземпляра класса с использованием шаблона, не знаю, как обрабатывать ошибку

Я постараюсь сделать код коротким.

Я пытаюсь создать B инарный S поиск T (сокращенно BST), используя шаблоны.

В моей функции добавления я получаю сообщение об ошибке, и я уверен, что каким-то образом неправильно использую шаблоны.

Весь этот код находится в файле .h (заголовок) из-за шаблонов.

РЕДАКТИРОВАТЬ: Константный тип и ошибка были из-за того, что я возился, на самом деле это было не в коде, который я компилировал, а из предыдущего вопроса о переполнении стека.

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


person Kalec    schedule 13.06.2012    source источник
comment
Мы уже знаем, что означает BST. ;)   -  person John Dibling    schedule 13.06.2012


Ответы (3)


Вы неправильно используете не шаблоны, а параметры!

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

должен больше походить на

this->left = new BSTNode<Type>(newKey, newData); 
person Rook    schedule 13.06.2012
comment
Спасибо, это сработало! Не знаю, как я это пропустил, но я просматривал код уже полчаса, и у меня появилось туннельное зрение. - person Kalec; 13.06.2012

Это должно быть this->left = new BSTNode<Type>(newKey, newData); без каких-либо типов.

person Asha    schedule 13.06.2012

Ошибка довольно ясна:

 bool add (int, Type);

vs

 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);
person Luchian Grigore    schedule 13.06.2012
comment
Хорошо, теперь решено, не знаю, как я это пропустил, думаю, я буду обвинять туннельное зрение - person Kalec; 13.06.2012