Доступ к данным вложенного частного класса - PullRequest
0 голосов
/ 05 ноября 2019

У меня есть класс Tree, у которого вложенный класс Node является закрытым.
В моем классе Tree есть открытый метод, который устанавливает Tree в дочерние элементы моего Node. Проблема в том, что у меня возникают ошибки, когда я хочу получить доступ к _children члену моего класса Node, даже если я использую метод получения.
Метод, о котором идет речь, ins(unsigned short i, Tree* childTree).
Вот мой код.
tree.hpp


#ifndef TREE_HPP
#define TREE_HPP

#include <iostream>
#include <cstddef> 
// #include "node.hpp"

template <typename T, unsigned short N>
class Tree {
private:

  class Node {
    private:
      T _data;
      Tree* _children[N];
    public:
      Node();
      Node(T);
      Tree** getChildren() {return this->_children;}
      T getData(){return this->_data;}
      ~Node() = default;
  };

  Node* _info;
public:
  Tree();
  Tree(T, unsigned short);
  Tree(const Tree&) = delete;  // copy constructor
  Tree& operator= (const Tree&) = delete; // assignement by copy constructor
  Tree (Tree&&); // transfer constructor
  Tree& operator= (Tree&&); // assignement by transfer constructor
  ~Tree() {delete _info;}
  // ~Tree() = default;
  bool ins(unsigned short i, Tree childTree) {
    if (_info){
      // _info->getChildren()[i] = std::move(childTree);
      _info->getChildren()[i] = &childTree;
      return true;
    }
    return false;
  }
};

template <typename T, unsigned short N> // Node class default constructor
Tree<T,N>::Node::Node(){
  _data = 0;
  _children = nullptr;
}

template <typename T, unsigned short N> // Node class constructor
Tree<T,N>::Node::Node(T data){
  _data = data;
  for (unsigned short i = 0; i < N; i++) 
    _children[i] = NULL;
}

template <typename T, unsigned short N>
Tree<T, N>::Tree() 
  : _info(nullptr) {}

template <typename T, unsigned short N>
Tree<T, N>::Tree(T data, unsigned short size) {
  Node* node = new Node(data);
  _info = node;
}

template <typename T, unsigned short N>
Tree<T, N>::Tree(Tree&& t) {
  _info = t._info;
  t._info = nullptr;
}

template <typename T, unsigned short N>
Tree<T, N>& Tree<T, N>::operator= (Tree&& t) {
  if (&t != this) {delete _info; _info = t._info; t._info = nullptr;}
  return *this;
}

#endif

main.cpp

#include <iostream>
#include <cstddef>
#include <exception>
#include "tree.hpp"

#define SIZE 5
int main() {
  Tree<char,SIZE> n1('A',SIZE);
  n1.ins(0,Tree<char,SIZE>('B',SIZE));
  n1.ins(1,Tree<char,SIZE>('C',SIZE));
  return 0;
}

Также я должен сказать, что _children должен бытьТип дерева, а не узла.
Спасибо, что продвинулись

...