Объявление шаблона:
template <typename DataType>
class BST
и ошибка, которую я продолжаю получать, - bst.h(101): см. ссылку на экземпляр шаблона класса "BST :: BinNode", скомпилированный bst.h(183): см. ссылку на экземпляр шаблона класса "BST", скомпилированный
Я думаю, что мой синтаксис может быть неправильным, но я не уверен, что это такое. Может кто-то подтолкнет меня в правильном направлении. Я просто не могу его скомпилировать. Класс BinNode является частным классом основного класса BST. Линейка, к которой относится ошибка, также относится к DataType BinNode :: treeheight (BinNode * p)
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;
}
При определении функции-члена (вне класса, то есть) вам необходимо определить определение функции-члена как Node<DataType>::BinNode::treeheight(…) {…}
поскольку BinNode
является вложенным классом Node
.
BinNode
не является шаблоном, но вы определяете его функцию-член, как если бы он был объявлен как шаблон. Более того, определение квалифицированной функции-члена (BinNode::treeheight(…) {…}
) не входит в тело класса, как это вы сделали здесь. Поместите это вне класса.Node
шаблоном? Если да, то при определении функции-члена (то есть вне класса) вам нужно квалифицировать определение функции-члена какNode<DataType>::BinNode::treeheight(…) {…}
посколькуBinNode
является вложенным классомNode
,