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

Бинарное дерево. Выводит ошибки: data: необъявленный идентификатор - C++

Восстановить пароль Регистрация
 
dobby
0 / 0 / 0
Регистрация: 15.02.2012
Сообщений: 47
30.09.2012, 14:16     Бинарное дерево. Выводит ошибки: data: необъявленный идентификатор #1
Прошу помощи
Вот программа:

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
# include <stdio.h> 
# include <conio.h> 
 
struct NODE{    // определение узла дерева 
     int  data;    // поле данных 
     NODE  *l_heir; // указатели на потомков 
     NODE   *r_heir; 
                     }; 
typedef NODE * TREE;         // определение указателя на узел 
 
TREE IniTree ( TREE  pt_tree  );    // инициация дерева 
 
TREE FormTree( TREE pt_tree );    // рекурсивное формирование  
           // дерева 
 
void LookTreeInOrder ( TREE pt_tree );  // просмотр дерева в 
            // симметричном порядке 
 
main() 
{ 
 TREE tree;    // создаем указатель на дерево 
 
 int tree_el;    // целое число — элемент дерева 
 
 clrscr(); 
 
 
  tree = IniTree( tree );     // не  возвращает данных об 
         // успехе/неуспехе попытки, 
         // поскольку указатель на 
         // дерево может быть 
         // модифицирован и его нужно 
         // вернуть 
 
 printf( "При вводе 0 предыдущий злемент входного потока — лист): \n"); 
 
  tree = FormTree( tree ); 
 
 printf("\nПросмотр дерева в симметричном порядке:\n"); 
 
 LookTreeInOrder( tree); 
 
 return 0; 
} 
 
TREE IniTree ( TREE  pt_tree )         // некорректный способ  
             // инициации, надо бы вернуть  
             // память в кучу 
{ 
 pt_tree = NULL; 
 return pt_tree;
} 
 
TREE FormTree( TREE pt_tree ) 
{ 
 int new_el; 
 TREE pt_buff; 
 
 scanf("%d", &new_el); 
 
 if ( new_el )   // != 0   // рекурсивное  
           // формирование ветви дерева 
           // завершается вводом нуля — 
           // построен лист; далее рекурсия  
           // возвращается на узел выше и  
           // ждет очередного нуля и т.д. 
 { 
  pt_tree = new NODE; 
  pt_tree–>data = new_el; 
 
  pt_tree–>l_heir = FormTree( pt_tree–>l_heir ); 
  pt_tree–>r_heir = FormTree( pt_tree–>r_heir ); 
 } 
 else 
  pt_tree = NULL; 
 
 return pt_tree; 
 } 
 
void LookTreeInOrder ( TREE pt_tree )    // описание рекурсивных  
             // процедур просмотра см. 
             // в разделе 2.2.13 «Деревья  
             // бинарного поиска» 
{ 
  if ( pt_tree != NULL ) 
 { 
  LookTreeInOrder( pt_tree–>l_heir ); 
    printf( "  %d ", pt_tree–>data ); 
  LookTreeInOrder( pt_tree–>r_heir ); 
 } 
}
Выводит ошибки: data: необъявленный идентификатор
l_heir: необъявленный идентификатор
r_heir: необъявленный идентификатор
pt_tree:необъявленный идентификатор
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.09.2012, 14:16     Бинарное дерево. Выводит ошибки: data: необъявленный идентификатор
Посмотрите здесь:

C++ Необъявленный идентификатор
C++ Необъявленный идентификатор
необъявленный идентификатор C++
Бинарное дерево, исправить ошибки в коде C++
C++ Класс: необъявленный идентификатор
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
cmath
Модератор
 Аватар для cmath
2415 / 1634 / 132
Регистрация: 11.08.2012
Сообщений: 3,252
Завершенные тесты: 5
30.09.2012, 15:19     Бинарное дерево. Выводит ошибки: data: необъявленный идентификатор #2
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
#include <Windows.h>
#include <locale.h>
#include <stdio.h> 
#include <conio.h> 
 
struct NODE{    // определение узла дерева 
     int  data;    // поле данных 
     NODE  *l_heir; // указатели на потомков 
     NODE   *r_heir; 
                     }; 
typedef NODE * TREE;         // определение указателя на узел 
 
TREE IniTree ( TREE  pt_tree  );    // инициация дерева 
 
TREE FormTree( TREE pt_tree );    // рекурсивное формирование  
           // дерева 
 
void LookTreeInOrder ( TREE pt_tree );  // просмотр дерева в 
            // симметричном порядке 
 
int main() 
{ 
    setlocale(LC_ALL, "Russian");
 TREE tree;    // создаем указатель на дерево 
 
 int tree_el;    // целое число — элемент дерева 
 tree = new NODE; 
 
 tree = IniTree( tree );     // не  возвращает данных об 
         // успехе/неуспехе попытки, 
         // поскольку указатель на 
         // дерево может быть 
         // модифицирован и его нужно 
         // вернуть 
 
 printf( "При вводе 0 предыдущий злемент входного потока — лист): \n"); 
 
  tree = FormTree( tree ); 
 
 printf("\nПросмотр дерева в симметричном порядке:\n"); 
 
 LookTreeInOrder( tree); 
 _getch();
 return 0; 
} 
 
TREE IniTree ( TREE  pt_tree )         // некорректный способ  
             // инициации, надо бы вернуть  
             // память в кучу 
{ 
 pt_tree = NULL; 
 return pt_tree;
} 
 
TREE FormTree( TREE pt_tree ) 
{ 
 int new_el; 
 TREE pt_buff; 
 
 scanf("%d", &new_el); 
 
 if ( new_el!=0 )   // != 0   // рекурсивное  
           // формирование ветви дерева 
           // завершается вводом нуля — 
           // построен лист; далее рекурсия  
           // возвращается на узел выше и  
           // ждет очередного нуля и т.д. 
 { 
  pt_tree = new NODE; 
  pt_tree->data = new_el; 
 
  pt_tree->l_heir = FormTree( pt_tree->l_heir ); 
  pt_tree->r_heir = FormTree( pt_tree->r_heir ); 
 } 
 else 
  pt_tree = NULL; 
 
 return pt_tree; 
 } 
 
void LookTreeInOrder ( TREE pt_tree )    // описание рекурсивных  
             // процедур просмотра см. 
             // в разделе 2.2.13 «Деревья  
             // бинарного поиска» 
{ 
  if ( pt_tree != NULL ) 
 { 
    LookTreeInOrder( pt_tree->l_heir ); 
    printf( "  %d ", pt_tree->data ); 
    LookTreeInOrder( pt_tree->r_heir ); 
 } 
}
Кхм, что за компилятор у вас? VC++? Если да, то какая версия?
У меня, после правки, на VC++ 2008 запустилась программа. Но сразу полезли runtime errors. Поэтому внес строки, которых у вас нет и убрал одну вашу: clrscr();
Кроме того, я не понял, как у вас выход из рекурсивной функции устроен? Я начал вводить числа. Вводил, вводил. После 552 числа надоело вводить и нажал на крестик - закрыл прогу. Деревце так и не увидел
З.Ы. Компилятор и его версия (а также наличие установленных пакетов обновления) здесь важно, т.к. ошибки о необъявленных идентификаторах связаны именно с этим. Синтаксис я не правил. Что сделал, скажу только после ответа на вопрос
Кхм, что за компилятор у вас?
dobby
0 / 0 / 0
Регистрация: 15.02.2012
Сообщений: 47
30.09.2012, 15:28  [ТС]     Бинарное дерево. Выводит ошибки: data: необъявленный идентификатор #3
Microsoft Visual Studio 2008
cmath
Модератор
 Аватар для cmath
2415 / 1634 / 132
Регистрация: 11.08.2012
Сообщений: 3,252
Завершенные тесты: 5
30.09.2012, 15:42     Бинарное дерево. Выводит ошибки: data: необъявленный идентификатор #4
Цитата Сообщение от dobby Посмотреть сообщение
Microsoft Visual Studio 2008
без SP1? Хотя что я спрашиваю-то! Конечно да! Весь фокус в том, что он посчитал ваши идентификаторы как сов. новые. Типо у вас два идентификатора с названием, например, pt_tree. Такая хрень происходит при
а) ручном вводе идентификатора (ниже объявления естественно) - решается копированием идентификатора из места, где его компилятор воспринимает и вставкой в нужное место.
б) ваш случай хех: при копировании идентификатора (это место оч. забавит) и вставки в нужное место. Решается ручным вводом взамен копирования.
Если у вас когда-нибудь и а) и б) случиться, то занового проект создавайте (ну или ройтесь в настройках среды, может чего интересного обнаружите)
Итого: это баг компилятора, который также решается установкой обновления.
dobby
0 / 0 / 0
Регистрация: 15.02.2012
Сообщений: 47
30.09.2012, 15:44  [ТС]     Бинарное дерево. Выводит ошибки: data: необъявленный идентификатор #5
то есть надо не копировать из книги а вручную набирать ? )))
попробую установить, хотя если в универе будут проверять там тоже будет не работать (я проверял)
cmath
Модератор
 Аватар для cmath
2415 / 1634 / 132
Регистрация: 11.08.2012
Сообщений: 3,252
Завершенные тесты: 5
30.09.2012, 15:56     Бинарное дерево. Выводит ошибки: data: необъявленный идентификатор #6
Цитата Сообщение от dobby Посмотреть сообщение
то есть надо не копировать из книги а вручную набирать ? )))
попробую установить, хотя если в универе будут проверять там тоже будет не работать
Бугага... Вы внимательно прочли мой пост? Перечитайте еще разок. Копировать можно, но осторожно, ровно как и вручную набирать. Я впервые с этой хренью (а иначе назвать не могу) встретился, когда писал программу оч. крупную, численно решающую систему д.у. (н да... сколько править тогда пришлось...)
Вам бы поправить ввод вашего дерева. Используйте флаг какой-нибудь что-ль (bool) для остановки процесса ввода, ограничивайте число элементов как-нибудь. Иначе вы в этой жизни не увидете конца работы этой программы.
dobby
0 / 0 / 0
Регистрация: 15.02.2012
Сообщений: 47
30.09.2012, 17:38  [ТС]     Бинарное дерево. Выводит ошибки: data: необъявленный идентификатор #7
Ok, попробую сделать)

Добавлено через 1 час 34 минуты
перепечалал, стал ругатся
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
#include <stdio.h>
#include <conio.h>
#include <iostream> 
using namespace std;
 
struct NODE{
            int data;
            NODE *l_heir,
                  *r_heir;
            };
typedef NODE *TREE;
TREE IniTree(TREE pt_tree);
TREE FormTree(TREE pt_tree);
void LookTreeInOrder(TREE pt_tree);
 
 int main()
{
    TREE tree;
    IniTree();
    printf("При вводе 0 предыдущий элемент входного потока - лист):\n");
    tree=FormTree(tree);
    printf("\nПросмотр дерева в симметричном порядке:\n");
    LookTreeInOrder(tree);
    return 0;
}
TREE IniTree(TREE pt_tree)
{
    pt_tree=NULL;
    return pt_tree;
}
TREE FormTree(TREE pt_tree)
{
    int new_el;
    scanf_s("%d",&new_el);
    if(new_el)
    {
        pt_tree=new NODE;
        pt_tree->data=new_el;
 
        pt_tree->l_heir=FormTree(pt_tree->l_heir);
        pt_tree->r_heir=FormTree(pt_tree->r_heir);
    }
    else 
    
    pt_tree=NULL;
    return pt_tree;
    
}
void LookTreeInOrder(TREE pt_tree)
{
        if(pt_tree!=NULL)
        {
            LookTreeInOrder(pt_tree->l_heir);
            printf(" %d",pt_tree->data);
            LookTreeInOrder(pt_tree->r_heir);
        }
}
использована неинициализированная локальная переменная "tree"
cmath
Модератор
 Аватар для cmath
2415 / 1634 / 132
Регистрация: 11.08.2012
Сообщений: 3,252
Завершенные тесты: 5
30.09.2012, 18:08     Бинарное дерево. Выводит ошибки: data: необъявленный идентификатор #8
Цитата Сообщение от dobby Посмотреть сообщение
использована неинициализированная локальная переменная "tree"
Добавьте tree = new NODE;
З.Ы. у меня в коде кст, эта строчка есть.

Добавлено через 1 минуту
или же пишите tree = NULL; и уберите
Цитата Сообщение от dobby Посмотреть сообщение
IniTree();
dobby
0 / 0 / 0
Регистрация: 15.02.2012
Сообщений: 47
30.09.2012, 18:25  [ТС]     Бинарное дерево. Выводит ошибки: data: необъявленный идентификатор #9
Исправил, после каждой цифры ноль добавлять и в конце два нуля
непонятно как она работает
и выводит цифры в строчку
непонятное дерево

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
# include <stdio.h> 
# include <conio.h> 
 #include <iostream> 
using namespace std;
struct NODE{    // определение узла дерева 
     int  data;    // поле данных 
     NODE  * l_heir, // указатели на потомков 
        * r_heir; 
                     }; 
typedef NODE * TREE;         // определение указателя на узел 
 
TREE IniTree ( TREE  pt_tree  );    // инициация дерева 
 
TREE FormTree( TREE pt_tree );    // рекурсивное формирование  
           // дерева 
 
void LookTreeInOrder ( TREE pt_tree );  // просмотр дерева в 
            // симметричном порядке 
 
int main() 
{ 
 TREE tree;    // создаем указатель на дерево 
system("cls");
 
 tree = new NODE; 
 
  tree = IniTree( tree );     // не  возвращает данных об 
         // успехе/неуспехе попытки, 
         // поскольку указатель на 
         // дерево может быть 
         // модифицирован и его нужно 
         // вернуть 0
 
 printf( "При вводе 0 предыдущий злемент входного потока — лист): \n"); 
 
  tree = FormTree( tree ); 
 
 printf("\nПросмотр дерева в симметричном порядке:\n"); 
 
 LookTreeInOrder( tree);
 _getch();
 
 return 0; 
} 
 
TREE IniTree ( TREE  pt_tree )         // некорректный способ  
             // инициации, надо бы вернуть  
             // память в кучу 
{ 
 pt_tree = NULL; 
 return pt_tree;
} 
 
TREE FormTree( TREE pt_tree ) 
{ 
 int new_el; 
 scanf_s("%d", &new_el); 
 
 if ( new_el )   // != 0   // рекурсивное  
           // формирование ветви дерева 
           // завершается вводом нуля — 
           // построен лист; далее рекурсия  
           // возвращается на узел выше и  
           // ждет очередного нуля и т.д. 
 { 
  pt_tree = new NODE; 
  pt_tree->data = new_el; 
 
  pt_tree->l_heir = FormTree( pt_tree->l_heir ); 
  pt_tree->r_heir = FormTree( pt_tree->r_heir ); 
 } 
 else 
  pt_tree = NULL; 
 
 return pt_tree; 
 } 
 
void LookTreeInOrder ( TREE pt_tree )    // описание рекурсивных  
             // процедур просмотра см. 
             // в разделе 2.2.13 «Деревья  
             // бинарного поиска» 
{ 
  if ( pt_tree != NULL ) 
 { 
  LookTreeInOrder( pt_tree->l_heir ); 
    printf( "  %d ", pt_tree->data ); 
  LookTreeInOrder( pt_tree->r_heir ); 
 } 
}
cmath
Модератор
 Аватар для cmath
2415 / 1634 / 132
Регистрация: 11.08.2012
Сообщений: 3,252
Завершенные тесты: 5
30.09.2012, 18:31     Бинарное дерево. Выводит ошибки: data: необъявленный идентификатор #10
Хех... Я не правильно "расшифровал" выход из рекурсии. Нуль нужен для перемещения по дереву на уровен вверх. Флаги не нужны и ограничители не нужны)))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.09.2012, 18:40     Бинарное дерево. Выводит ошибки: data: необъявленный идентификатор
Еще ссылки по теме:

Необъявленный идентификатор C++
Ошибки "cin: необъявленный идентификатор" C++
C++ Необъявленный идентификатор

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
dobby
0 / 0 / 0
Регистрация: 15.02.2012
Сообщений: 47
30.09.2012, 18:40  [ТС]     Бинарное дерево. Выводит ошибки: data: необъявленный идентификатор #11
Цитата Сообщение от Hydrogen Посмотреть сообщение
Хех... Я не правильно "расшифровал" выход из рекурсии. Нуль нужен для перемещения по дереву на уровен вверх. Флаги не нужны и ограничители не нужны)))
а сейчас он выводит цифры в строчку, это правильно?
непохоже на дерево((
Yandex
Объявления
30.09.2012, 18:40     Бинарное дерево. Выводит ошибки: data: необъявленный идентификатор
Ответ Создать тему
Опции темы

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