Я реализую двоичное дерево, используя вектор, который я ранее определил. В двоичном дереве есть структура Node внутри, и это похоже на невозможность получить доступ к вектору, определенному внутри класса двоичного дерева, из моих функций узла.
Итак, это двоичное дерево:
template <typename Data>
class BinaryTreeVec : public BinaryTree<Data>{
private:
protected:
using BinaryTree<Data>::size;
ulong height = 0;
public:
using typename BinaryTree<Data>::Node;
struct NodeVec : public Node{
private:
protected:
using Node::value;
ulong left;
ulong right;
ulong index;
ulong height;
bool isValid = false;
public:
friend class BinaryTreeVec<Data>;
....
bool HasLeftChild() const noexcept override; // Override Node member
bool HasRightChild() const noexcept override; // Override Node member
....
}
....
protected:
Vector<struct NodeVec> treeVec;
}
Все работает нормально, пока я не вызову функции HasLeftChild (), где я получаю ошибку: недопустимое использование нестатического c элемента данных ' lasd :: BinaryTreeVe c :: treeVec '. Мой профессор предлагает мне, что использование ссылки было бы лучшим вариантом для решения проблемы, поэтому я попытался объявить ссылку на treeVe c, чтобы я мог использовать ее внутри NodeVe c, но это было полностью бесполезно.
template <typename Data>
bool BinaryTreeVec<Data>::NodeVec::HasLeftChild() const noexcept{
if( 2 * index + 1 < treeVec.Size())
return ( treeVec[2 * index + 1].flag == true );
return false;
}
Я получаю ошибку компилятора каждый раз, когда использую treeVe c в функции HasLeftChild () здесь.