#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. Только что внесенное редактирование в код по-прежнему вызывает ту же проблему