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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
dobby
0 / 0 / 0
Регистрация: 15.02.2012
Сообщений: 47
#1

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

30.09.2012, 14:16. Просмотров 755. Ответов 10
Метки нет (Все метки)

Прошу помощи
Вот программа:

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:необъявленный идентификатор
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.09.2012, 14:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Бинарное дерево. Выводит ошибки: data: необъявленный идентификатор (C++):

Найти причины и способы исправления ошибки "error C2065: необъявленный идентификатор" - C++
имеется f1.h typedef struct { int some; } tStruct; f2.h

Ошибки "cin: необъявленный идентификатор" - C++
вот код#include &lt;conio.h&gt; #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; #include &lt;iostream&gt; struct Bus{ ...

Бинарное дерево выводит только последний узел - C++
дерево выводит только последний узел а не все #include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; struct Node //звено {...

Исходное бинарное дерево превратить в бинарное дерево поиска, при этом сохранив его структуру - C++
Помогите, не могу понять!( Нужно исходное бинарное дерево превратить в бинарное дерево поиска, при этом сохранив его структуру. вот...

Бинарное дерево, исправить ошибки в коде - C++
в общем, есть такой вот код. компилится, ошибок нет. а запускаться - не запускается( подскажите, в чём проблема? #include &quot;stdafx.h&quot; ...

Необъявленный идентификатор - C++
Думаю проблему в скобках, где не могу найти=( #include &lt;iostream&gt; #include &lt;windows.h&gt; using namespace std; void main() { ...

10
cmath
Модератор
2440 / 1680 / 134
Регистрация: 11.08.2012
Сообщений: 3,338
Завершенные тесты: 6
30.09.2012, 15:19 #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 числа надоело вводить и нажал на крестик - закрыл прогу. Деревце так и не увидел
З.Ы. Компилятор и его версия (а также наличие установленных пакетов обновления) здесь важно, т.к. ошибки о необъявленных идентификаторах связаны именно с этим. Синтаксис я не правил. Что сделал, скажу только после ответа на вопрос
Кхм, что за компилятор у вас?
0
dobby
0 / 0 / 0
Регистрация: 15.02.2012
Сообщений: 47
30.09.2012, 15:28  [ТС] #3
Microsoft Visual Studio 2008
0
cmath
Модератор
2440 / 1680 / 134
Регистрация: 11.08.2012
Сообщений: 3,338
Завершенные тесты: 6
30.09.2012, 15:42 #4
Цитата Сообщение от dobby Посмотреть сообщение
Microsoft Visual Studio 2008
без SP1? Хотя что я спрашиваю-то! Конечно да! Весь фокус в том, что он посчитал ваши идентификаторы как сов. новые. Типо у вас два идентификатора с названием, например, pt_tree. Такая хрень происходит при
а) ручном вводе идентификатора (ниже объявления естественно) - решается копированием идентификатора из места, где его компилятор воспринимает и вставкой в нужное место.
б) ваш случай хех: при копировании идентификатора (это место оч. забавит) и вставки в нужное место. Решается ручным вводом взамен копирования.
Если у вас когда-нибудь и а) и б) случиться, то занового проект создавайте (ну или ройтесь в настройках среды, может чего интересного обнаружите)
Итого: это баг компилятора, который также решается установкой обновления.
1
dobby
0 / 0 / 0
Регистрация: 15.02.2012
Сообщений: 47
30.09.2012, 15:44  [ТС] #5
то есть надо не копировать из книги а вручную набирать ? )))
попробую установить, хотя если в универе будут проверять там тоже будет не работать (я проверял)
0
cmath
Модератор
2440 / 1680 / 134
Регистрация: 11.08.2012
Сообщений: 3,338
Завершенные тесты: 6
30.09.2012, 15:56 #6
Цитата Сообщение от dobby Посмотреть сообщение
то есть надо не копировать из книги а вручную набирать ? )))
попробую установить, хотя если в универе будут проверять там тоже будет не работать
Бугага... Вы внимательно прочли мой пост? Перечитайте еще разок. Копировать можно, но осторожно, ровно как и вручную набирать. Я впервые с этой хренью (а иначе назвать не могу) встретился, когда писал программу оч. крупную, численно решающую систему д.у. (н да... сколько править тогда пришлось...)
Вам бы поправить ввод вашего дерева. Используйте флаг какой-нибудь что-ль (bool) для остановки процесса ввода, ограничивайте число элементов как-нибудь. Иначе вы в этой жизни не увидете конца работы этой программы.
1
dobby
0 / 0 / 0
Регистрация: 15.02.2012
Сообщений: 47
30.09.2012, 17:38  [ТС] #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"
0
cmath
Модератор
2440 / 1680 / 134
Регистрация: 11.08.2012
Сообщений: 3,338
Завершенные тесты: 6
30.09.2012, 18:08 #8
Цитата Сообщение от dobby Посмотреть сообщение
использована неинициализированная локальная переменная "tree"
Добавьте tree = new NODE;
З.Ы. у меня в коде кст, эта строчка есть.

Добавлено через 1 минуту
или же пишите tree = NULL; и уберите
Цитата Сообщение от dobby Посмотреть сообщение
IniTree();
1
dobby
0 / 0 / 0
Регистрация: 15.02.2012
Сообщений: 47
30.09.2012, 18:25  [ТС] #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 ); 
 } 
}
0
cmath
Модератор
2440 / 1680 / 134
Регистрация: 11.08.2012
Сообщений: 3,338
Завершенные тесты: 6
30.09.2012, 18:31 #10
Хех... Я не правильно "расшифровал" выход из рекурсии. Нуль нужен для перемещения по дереву на уровен вверх. Флаги не нужны и ограничители не нужны)))
0
dobby
0 / 0 / 0
Регистрация: 15.02.2012
Сообщений: 47
30.09.2012, 18:40  [ТС] #11
Цитата Сообщение от Hydrogen Посмотреть сообщение
Хех... Я не правильно "расшифровал" выход из рекурсии. Нуль нужен для перемещения по дереву на уровен вверх. Флаги не нужны и ограничители не нужны)))
а сейчас он выводит цифры в строчку, это правильно?
непохоже на дерево((
0
30.09.2012, 18:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.09.2012, 18:40
Привет! Вот еще темы с ответами:

Необъявленный идентификатор j - C++
Нужно сформировать квадратную матрицу вида: 1 2 ...... n n n-1 ..... 1 1 2 ...... n n n-1 ..... 1 ............... ...

Необъявленный идентификатор - C++
Подскажите где ошибка? Совсем не давно начал изучать С++. Вроде все правильно. а проверка все ровно выдает ошибку. #include &lt;iostream&gt; ...

необъявленный идентификатор - C++
#include &lt;conio.h&gt; #include &lt;iostream&gt; using namespace std; int vichis(int,int,int&amp;); void cifri(int); void main() { int a; ...

Необъявленный идентификатор - C++
И снова ВСЕМ добрый вечер!!!:) Написав десяток примеров из книги, в качестве упражнений для себя и закрепления материала решил на...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru