带模板参数的模板函数

时间:2013-11-27 18:59:20

标签: c++ templates

我想创建一个工厂,如果AVLNodeBinaryTree则返回AVLTree,如果树不是AVL则返回Node。我有以下代码:

#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;
};

我删除了几乎所有方法,使代码更具可读性。

现在我在编译期间遇到了这个错误:“在'&lt;'之前预期的初始化程序令牌”。此外,Qt不会在Node中突出显示,而是在BinaryTree中突出显示

1 个答案:

答案 0 :(得分:1)

这是一个语法错误。你需要

template <class T> // or <typename T>
Node<T>* NodeFactory::getNode(BinaryTree<T>* tree) {