2014-11-14 4 views
0

Объявление шаблона:шаблона и BST

template <typename DataType> 
class BST  

и ошибка, что я получаю это bst.h (101): см ссылку на шаблон класса конкретизации «BST :: BinNode» компилируется BST .h (183): см. ссылку на экземпляр шаблона класса «BST», который скомпилирован

Я думаю, что мой синтаксис может быть неправильным, но я не уверен, что это такое. Может кто-то подтолкнет меня в правильном направлении. Я просто не могу его скомпилировать. Класс BinNode является частным классом основного класса BST. Линия ошибка имеет в виду тоже DataType BinNode :: treeheight (BinNode * р)

private: 
/***** Node class *****/ 
class BinNode 
{ 
public: 

DataType data; 
BinNode * left; 
BinNode * right; 
DataType treeheight(BinNode * p); 

template <typename DataType> 
DataType BinNode::treeheight(BinNode * p) 
{ 
    if(p != 0) 
    { 
     int heightl = treeheight(p->left); 
     int heightr = treeheight(p->right); 
    } 

    if(heightl > heightr) 
     return heightl; 

    else 
     return height r; 
} 
+0

'BinNode' не является шаблоном, но вы определяете его функцию-член, как если бы он был объявлен как шаблон. Более того, определение функции квалифицированного члена ('BinNode :: treeheight (...) {...}') не входит в тело класса, поскольку похоже, что вы это сделали. Поместите его вне класса. – 0x499602D2

+0

Является ли класс 'Node' шаблоном? Если это так, при определении функции-члена (вне класса, то есть), вам нужно квалифицировать определение функции-члена как «Node :: BinNode :: treeheight (...) {...}', поскольку 'BinNode' является вложенным классом «Узел». – 0x499602D2

+0

Я предположил, что это связано с тем, что он использовал DataType для переменной данных, но это единственный индикатор, который является частью шаблона – bigdog225

ответ

0

При определении функции-члена (вне класса, то есть), вам необходимо квалифицировать определение функции-члена, как Node<DataType>::BinNode::treeheight(…) {…} так BinNode - это вложенный класс Node.

Смежные вопросы