Форум программистов, компьютерный форум CyberForum.ru

Не создается переменная - C++

Восстановить пароль Регистрация
 
Heir123
4 / 4 / 0
Регистрация: 05.06.2012
Сообщений: 10
12.01.2013, 11:21     Не создается переменная #1
В общем, с указателем *root творится какая-то чушь.
Компилятор как-будто не видит его объявление.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
#include <iostream.h>
#include <string.h>
#include <conio.h>
 
template <class T> struct elem
        {
        T info;
        elem<T> *left, *right;
        };
template <class T> class bin_tree
{
 
        private:
        elem<T> *root;
        void rec_prnt(elem<T> *el);
        public:
        bin_tree();
        T* add(T A);
        void del(T D);
        T* find(T F);
        void print();
};
template<class T>  bin_tree<T>::bin_tree()
{
        root=NULL;
}
template<class T> T*   bin_tree<T>::add(T A)
{
        elem<T> *current=root;
        while(1)
        {
                if(!current)
                {
                        current=new elem<T>;
                        current->info=A;
                        current->left=NULL;
                        current->right=NULL;
 
                        break;
                }
                else
                {
                        if(current->info==A)    break;
                        if(current->info>A)     current=current->left;
                        else                    current=current->right;
                }
        }
        return &current->info;
}
template<class T> void  bin_tree<T>::del(T D)
{
        if (root->inf==D)
        {
                delete root;
                root=NULL;
        }
        elem<T> *current=root;
        while(1)
        {
                if(current->info>D)
                {
                        if(current->left->info==D)
                        {
                                delete current->left;
                                current->left=NULL;
                                break;
                        }
                        current=current->left;
                }
                else
                {
                        if(current->right->info==D)
                        {
                                delete current->right;
                                current->right=NULL;
                                break;
 
                        }
                        current=current->right;
                }
 
        }
}
 template<class T> T* bin_tree<T>::find(T F)
{
        elem<T> *current=root;
        while(1)
        {
                if(!current)
                {
                        return NULL;
                }
                else
                {
                        if(current->info==F)    return &current->info;
                        if(current->info>F)     current=current->left;
                        else                    current=current->right;
                }
        }
}
template<class T> void bin_tree<T>::rec_prnt(elem<T> *el)
{
        el->info.print();
        if(el->left) rec_prnt(el->left);
        if(el->right) rec_prnt(el->right);
}
template<class T> void  bin_tree<T>::print()
{
    if(root) rec_prnt(root);
}
 
struct data
{
        char DATA[40];
        bin_tree<data> *bt_data;
 
        data(char *D);
        data(){bt_data=NULL;}
        int operator > (const data &sravn);
        int operator == (const data &sravn);
        void print();
};
data::data(char *D)
{
        strcpy(DATA,D);
        bt_data=NULL;
}
int data::operator > (const data &sravn)
{
    if(strcmp(this->DATA,sravn.DATA)>0) return 1;
    else return 0;
}
int data::operator == (const data &sravn)
{
    if(strcmp(this->DATA,sravn.DATA)==0) return 1;
    else return 0;
}
void data::print()
{
cout<<DATA;
if(bt_data) bt_data->print();
}
 
int main()
{
data *reis;
data *date;
data *dest;
data *fio;
char buf[40];
bin_tree<data> *avia;
avia = new bin_tree<data>;
int s;
while(1)
{
        cout<<"1.Add"<<endl
        <<"2.Cancel flight"<<endl
        <<"3.All"<<endl
        <<"4.Exit"<<endl;
        cin>>s;
        switch(s)
        {
        case 1:
        cout<<"Flight number: ";
        cin.ignore();
        cin.getline(buf,40,'\n');
        reis=new data(buf);
        reis=avia->add(*reis);
        cout<<"Date: ";
        cin.ignore();
        cin.getline(buf,40,'\n');
        date=new data(buf);
        reis->bt_data=new bin_tree<data>;
        date=reis->bt_data->add(*date);
        cout<<"Destinition: ";
        cin.ignore();
        cin.getline(buf,40,'\n');
        dest=new data(buf);
        date->bt_data=new bin_tree<data>;
        dest=date->bt_data->add(*dest);
        cout<<"FIO: ";
        cin.ignore();
        cin.getline(buf,40,'\n');
        fio=new data(buf);
        dest->bt_data=new bin_tree<data>;
        fio=dest->bt_data->add(*fio);
        cout<<"Ok"<<endl;
 
        break;
        case 2:
        cout<<"Flight number: ";
        cin.ignore();
        cin.getline(buf,40,'\n');
        reis=new data(buf);
        reis=avia->find(*reis);
        cout<<"Date: ";
        cin.ignore();
        cin.getline(buf,40,'\n');
        date=new data(buf);
        date=reis->bt_data->find(*date);
        date->print();
        delete date->bt_data;
        date->bt_data=NULL;
        break;
        case 3:
        avia->print();
        break;
        default: return 0;
        }
}
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.01.2013, 11:21     Не создается переменная
Посмотрите здесь:

C++ Не создается объект
Не создается процесс C++
C++ Не создается проект
C++ Не создается объект класса
C++ Не создается файл в каталоге
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11807 / 6786 / 767
Регистрация: 27.09.2012
Сообщений: 16,840
Записей в блоге: 2
Завершенные тесты: 1
12.01.2013, 11:28     Не создается переменная #2
Компилятор как-будто не видит его объявление.
Компиляция прошла без ошибок (VS 2012, MinGW)
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
12.01.2013, 11:33     Не создается переменная #3
у вас же root это NULL указатель,и вы его записываете каждый раз в текущий,возможно нужно было изменять корень бинарного дерева (я деревья не делал , но думаю ошибка в зтом)

Добавлено через 4 минуты
и вы каждый раз инициализируете ветку дерева конструктором по умолчанию, вам нужен параметрический с параметром корень
Heir123
4 / 4 / 0
Регистрация: 05.06.2012
Сообщений: 10
12.01.2013, 11:44  [ТС]     Не создается переменная #4
Мне казалось что если я сначала приравняю root и current, а потом выделю память, то память выделиться под root.
Видимот такая фишка с NULL не работает.
Добавил
C++
1
2
3
4
5
6
7
8
        if(!root)
        {
                        root=new elem<T>;
                        root->info=A;
                        root->left=NULL;
                        root->right=NULL;
            return &root->info;
        }
Всё работает.
Всем спасибо. Тему можно закрывать.
Yandex
Объявления
12.01.2013, 11:44     Не создается переменная
Ответ Создать тему
Опции темы

Текущее время: 17:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru