Функция шаблона с параметром шаблона

0

Я хочу создать фабрику, которая возвращает AVLNode, если BinaryTree является AVLTree и Node если дерево не является AVL. У меня есть следующий код:

#include "BinaryTree.h"
#include "AVLTree.h"

class NodeFactory {

public :
    template <class T>
    static Node<T>* getNode(BinaryTree<T>* tree);
};

template <class T>
Node<T>* NodeFactory::getNode(BinaryTree<T>* tree) {
    if (tree->isAVL()) {
        return new AVLNode<T>();
    } else {
        return new Node<T>();
    }
}

UPD: (this is BinaryTree.h) 
template <class T> class Node;

template <class T> class BinaryTree {

public:

BinaryTree() {
    _isAVL = false;
    root = new Node<T>();
}

bool isAVL() {
    return _isAVL;
}

private:
    T elem;
    Node<T>* root;
    bool _isAVL;
};

template <class T> class Node {

public:
    Node() {
        left = NULL;
        right = NULL;
    }

    T get() {
        return elem;
    }

    void setRight(const T elem) {
        right = new Node<T>();
        right->set(elem);
    }

    void setLeft(const T elem) {
        left = new Node<T>();
        left->set(elem);
    }

private:
        T elem;
        Node* left;
        Node* right;
};

Я удалил почти все методы, чтобы сделать код более удобочитаемым.

Теперь у меня есть эта ошибка во время компиляции: "ожидаемый инициализатор перед" <токеном ". Также Qt не выделяется в узле, но выделяется в BinaryTree

  • 0
    В чем вопрос?
  • 0
    О, я удалил вопрос во время редактирования
Показать ещё 1 комментарий
Теги:
templates

1 ответ

1

Это синтаксическая ошибка. Тебе нужно

template <class T> // or <typename T>
Node<T>* NodeFactory::getNode(BinaryTree<T>* tree) {
  • 0
    NodeFactory <T> :: getNode? Хотя я могу ошибаться
  • 1
    @FlorisVelleman Нет, класс не является шаблоном.
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню