Возможно ли иметь переменную члена класса BST внутри класса, используемого для BST? - PullRequest
0 голосов
/ 01 мая 2018

У меня есть класс Binary Search Tree, который использует шаблоны. Поэтому я могу создать BST типа Faculty, но есть ли способ включить BST в класс Faculty?

Я хочу хранить дерево целых чисел как переменную-член в классе Faculty.

Таким образом, у меня будет дерево факультетов, и каждый узел (типа факультета) будет иметь свое собственное дерево целых чисел.

Вот класс факультета, в котором я пытаюсь добавить переменную-член BST. Из того, что я читал в другом месте, проблема заключается в попытке #include файла BST.h, так как я уже включил файл Faculty в файл BST.

#ifndef Faculty_H
#define Faculty_H

#include "Person.h"
#include "BST.h"


using namespace std;

class Faculty : public Person
{

public:


Faculty();
Faculty(int new_ID);
~Faculty();


friend ostream& operator<<(ostream& os, Faculty& f);



private:


BST<int> advisees;

};






#endif //Faculty_H

Вот моя ошибка: ./Faculty.h:36:2: ошибка: неизвестное имя типа 'BST' BST советует;

И ЗДЕСЬ BST.H

#ifndef BST_H
#define BST_H

#include <iostream>
#include <fstream>
#include <cmath>
#include <cstdlib>

#include "tree_node.h"
#include "tree_node.cpp"

#include "Person.h"
#include "Student.h"
#include "Faculty.h"

using namespace std;




template <class T>
class BST
{

public:

BST();
~BST();


void insert(T k);
tree_node<T>* find(T k);
bool contains(T k);
bool delete_node(T k);

tree_node<T> *get_min();
tree_node<T> *get_max();

tree_node<T> *get_root();

bool is_empty();
int get_size();
void print_tree(tree_node<T> *node);

tree_node<T>* get_successor(tree_node<T> *d);




private:

tree_node<T> *root;
unsigned int size;
};



#endif //BST_H

1 Ответ

0 голосов
/ 01 мая 2018

У вас есть #include цикл; BST.h включает Faculty.h, что включает BST.h. Это может вызвать много проблем, включая то, что вы видите сейчас; в зависимости от порядка включения определение BST может быть недоступно, если его необходимо использовать факультету.

BST.h не нужно ничего знать о личности, студенте или факультете. Удаление этих включений должно решить текущую проблему.

...