With extraneous code removed, your problem simplifies to
Code:
template <typename T>
class Node
{
protected:
size_t size;
};
template <typename T>
class BinaryTreeNode : public Node<T>
{
public:
BinaryTreeNode()
{
size = 0;
}
};
When you remove the templates, the code compiles.
Code:
//template <typename T>
class Node
{
protected:
size_t size;
};
//template <typename T>
class BinaryTreeNode : public Node//<T>
{
public:
BinaryTreeNode()
{
size = 0;
}
};
On a hunch, using
in the original version works. Don't ask me why, I'm a C programmer.
In short, for some reason, you want
Code:
template <typename T>
class BinaryTreeNode : public Node<T>
{
public:
BinaryTreeNode() : Node<T>(2) { }
BinaryTreeNode(T x) : Node<T>(2, x) { }
~BinaryTreeNode()
{
delete Node<T>::child[0];
delete Node<T>::child[1];
}
};