Как заставить класс узнать про экземпляр другого класса?

197
19 октября 2021, 21:10

У меня есть класс BinTree, описывающий бинарное дерево поиска:

 class BinTree
    {
    public:
        BinTree();
        ~BinTree();
        bool IsEmpty();
        bool IsFull();
        const int Size() const;
        bool Add(Item data);
        bool In(Item data);
        bool Delete(Item data);
        void Traverse();
...
}

Для класса BinTree, у меня в int main() создан его экземпляр:

#include<iostream>
#include"BinTree.h"
#include"menu.h"
//extern BinTree mytree;
int main()
{
    BinTree mytree;//экземпляр
    return 0;
}

Мне нужно,чтобы этот экземпляр был доступен и в другом классе- menu

class menu
{
private:
    static void upp(string str);
public:
    static void addpet();
};
void menu::upp(string str)
{
    for (int i = 0; i < str.length; i++)
    {
        str[i] = toupper(str[i]);
    }
}
void menu::addpet()
{
    Item temp;
    cout << "Please enter name of pet: " << endl;
    //std:sin >> temp.Name;
    getline(std::cin, temp.Name);
    cout << "Please enter pet kind: " << endl;
    getline(std::cin, temp.Kind);
    upp(temp.Name);
    upp(temp.Kind);
    mytree.Add(temp);
}

Проблема возникает в этой строчке

mytree.Add(temp);

Потому что "идентификатор mytree не определен". Как тогда сделать так, чтобы класс menu узнал про экземпляр другого класса? Единственное,что мне в голову пришло - сделать глобальную область видимости между файлами с помощью extern(но это на крайний случай). Есть ли более правильные способы,то есть без использования глобальной переменной?

Answer 1

А если так?

#include<iostream>
#include"BinTree.h"
#include"menu.h"
int main()
{
    BinTree mytree;//экземпляр
    menu::addpet(mytree); // <- сплавляем дерево по ссылке
    return 0;
}
Answer 2
void menu::addpet(BinTree& mytree)
{
    ...
    mytree.Add(temp);
}
READ ALSO
шаблонные классы в разных файлах [дубликат]

шаблонные классы в разных файлах [дубликат]

написал на взгляд ОБСОЛЮТНО рабочий код, но он не работает(

115
Не удается открыть файл включение: No such file or directory QT CREATOR

Не удается открыть файл включение: No such file or directory QT CREATOR

Пишу приложение, использую qt creator в качестве ide, и понадобилось мне использовать SFML, но возникла проблема: вpro файл добавил код для подключения...

214
Семафор (теория)

Семафор (теория)

Представим у нас есть разделяемый буфер размером в 4 записи

164
Как создать динамичную смену картинок при нажатии в ReactJS

Как создать динамичную смену картинок при нажатии в ReactJS

поставил себе задачу при клике на картинку like менять ее на другую в посте, чтобы пользователь понимал, что, что-либо поменялось в initialState у posts добавил...

146