Это мое первое знакомство с шаблонами C ++, и я пытаюсь создать шаблон BinaryTree
, чтобы помочь мне с проблемой Project Euler; однако, я, кажется, получаю ошибку, когда класс BinaryTree
не распознает все конструкторы BinaryTreeNode
! Вот фрагмент кода.
template <class T>
class BinaryTreeNode
{
private:
BinaryTreeNode<T>* _left;
BinaryTreeNode<T>* _right;
T* _value;
public:
BinaryTreeNode();
explicit BinaryTreeNode(const T& value) : _value(&(T(value))) {}
BinaryTreeNode(BinaryTreeNode<T>& left, BinaryTreeNode<T>& right, const T& value) :
_left(&left), _right(&right), _value(&(T(value))){}
};
Класс BinaryTree
#include "BinaryTreeNode.h"
template <class T>
class BinaryTree
{
private:
BinaryTreeNode<T>* _root;
BinaryTreeNode<T>* _current;
unsigned int size;
public:
BinaryTree() : size(0), _root(0), _current(0) { }
explicit BinaryTree(BinaryTree<T>& leftTree, BinaryTree<T>& rightTree, const T& value) :
size(leftTree.Size() + rightTree.Size() + 1), _root(leftTree.Root(), rightTree.Root(), value), _current(_root) {}
explicit BinaryTree(const T& value) : size(1), _root(value) {}
const BinaryTreeNode<T>& Root() const { return *_root;}
};
Я получаю эти ошибки.
error C2359: 'BinaryTree<T>::_root' : member of non-class type requires single initializer expression
error C2440: 'initializing' : cannot convert from 'const int' to 'BinaryTreeNode<T> *'
error C2439: 'BinaryTree<T>::_root' : member could not be initialized
Конструктор BinaryTreeNode
из (BinaryTreeNode<T>&, BinaryTreeNode<T>&, const T& value)
работает, когда я включаю его в основной код, но, похоже, он не работает в моем шаблоне BinaryTree
. Кто-нибудь знает почему?