вложенная структура узла внутри двоичного дерева поиска проблема возврата значения c

#c #function #class #oop #tree

#c #функция #класс #ооп #дерево

Вопрос:

Я создал этот класс дерева:

  #ifndef BST_H_
#define BST_H_

#include <iostream>
#include "treeExceptions.h"

typedef int T;
typedef struct vertice vertice;

    #ifndef BST_H_
#define BST_H_

#include <iostream>
#include "treeExceptions.h"

typedef int T;
typedef struct vertice vertice;



class BST
{
    private:
        struct vertice
    {
        private:
        protected:
        public:
        T data;
        vertice* left;
        vertice* right;
        vertice():left(nullptr),right(nullptr),data(0){};
        vertice(const Tamp; val):left(nullptr),right(nullptr),data(val){};
    };
    static vertice* auxErase(vertice* root,const Tamp; val);
    
    protected:
    vertice* root;
    static vertice* findSuccessor(vertice* root);
    static bool Contain(vertice* root,const Tamp; val);
    static void auxPrintInOrder(vertice* root);
    static void auxInsert(vertice* root,const Tamp; val);
    void EmptyTree(vertice* root);

    public:

    //CONSTRUCTOR
    explicit BST():root(nullptr){};
    //DESTRUCTOR
    ~BST();
    void insert(const Tamp; val);
    void erase(const Tamp; val);
    bool find(const Tamp; val);
    void printInOrder();
};
  

Я создал кучу вспомогательных функций, чтобы пользователю вообще не приходилось работать с узлами.

в двух моих функциях ‘findSuccessor’ и ‘auxErase’ возвращаемое значение равно ‘vertice *’. Я попытался поместить структуру ‘vertice’ внутри класса, но когда я это сделаю, я получу сообщение об ошибке соответствия:

кандидат: по британскому летнему времени статические::вершины* по британскому летнему времени::auxErase(…) структура по британскому летнему времени::вершины частный в этом контексте

Если я изменю значение reutrn на любое другое, кроме ‘vertice *’, оно не покажет никакой ошибки

редактировать: я изменил код на тот, который выдает мне ошибку соответствия

Комментарии:

1. Вы не определяете тип BST::vertice . Эта структура определена (судя по всему) в глобальной области видимости.

2. Кроме того, в C все имена структур и классов также являются типами, что означает, что вам не нужно определение typedef struct vertice vertice; псевдонима.

3. Вы можете поместить структуру в класс, но она должна быть общедоступной. Редактировать: теперь я вижу, что методы также являются частными. Можете ли вы опубликовать фактический код, который не компилируется?

4. Только что внесенное редактирование в код по-прежнему вызывает ту же проблему