С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 15.02.2012
Сообщений: 47
1

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

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

Author24 — интернет-сервис помощи студентам
Прошу помощи
Вот программа:

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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.09.2012, 14:16
Ответы с готовыми решениями:

Ошибки в проекте - HWND: необъявленный идентификатор
Доброго времени суток. Возникла такая проблема: Пишу проект на C++ (Windows Forms), так вот......

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

Ошибки вида "textBox2–: необъявленный идентификатор"
Привет всем. Код формы следующий: #pragma once namespace lr7_2nd_try { using...

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

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

Добавлено через 1 минуту
или же пишите tree = NULL; и уберите
Цитата Сообщение от dobby Посмотреть сообщение
IniTree();
1
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
2525 / 1751 / 152
Регистрация: 11.08.2012
Сообщений: 3,349
30.09.2012, 18:31 10
Хех... Я не правильно "расшифровал" выход из рекурсии. Нуль нужен для перемещения по дереву на уровен вверх. Флаги не нужны и ограничители не нужны)))
0
0 / 0 / 0
Регистрация: 15.02.2012
Сообщений: 47
30.09.2012, 18:40  [ТС] 11
Цитата Сообщение от Hydrogen Посмотреть сообщение
Хех... Я не правильно "расшифровал" выход из рекурсии. Нуль нужен для перемещения по дереву на уровен вверх. Флаги не нужны и ограничители не нужны)))
а сейчас он выводит цифры в строчку, это правильно?
непохоже на дерево((
0
30.09.2012, 18:40
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.09.2012, 18:40
Помогаю со студенческими работами здесь

Бинарное дерево выводит только последний узел
дерево выводит только последний узел а не все #include &lt;iostream&gt; #include &lt;vector&gt; using...

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

Бинарное дерево, исправить ошибки в коде
в общем, есть такой вот код. компилится, ошибок нет. а запускаться - не запускается( подскажите, в...

Преобразовать идеальное бинарное дерево в бинарное дерево поиска
Всем привет, я создал идельное бинарное дерево и написал к нему функции. Как мне теперь можно...

Необъявленный идентификатор
Всем привет). Не могу понять в чем ошибка. Пишет что i и j необъявленный идентификатор в 33 строке....

Необъявленный идентификатор
Всем привет! Кто может помочь с кодом? Где моя ошибка. Нужно было написать программу для...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Что такое CQRS и как это реализовать на C# с MediatR
InfoMaster 15.01.2025
Концепция CQRS и её роль в современной разработке В современном мире разработки программного обеспечения архитектурные паттерны играют ключевую роль в создании масштабируемых и поддерживаемых. . .
Как настроить CI/CD с Azure DevOps
InfoMaster 15.01.2025
CI/ CD, или непрерывная интеграция и непрерывное развертывание, представляет собой современный подход к разработке программного обеспечения, который позволяет автоматизировать и оптимизировать процесс. . .
Как настроить CI/CD с помощью Jenkins
InfoMaster 15.01.2025
Введение в CI/ CD и Jenkins В современной разработке программного обеспечения непрерывная интеграция (CI) и непрерывная доставка (CD) стали неотъемлемыми элементами процесса создания качественных. . .
Как написать микросервис на Go/Golang с Kafka и GitHub CI/CD
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
Как написать микросервис с нуля на C# с RabbitMQ, CQRS и CI/CD
InfoMaster 14.01.2025
В современном мире разработки программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот архитектурный подход предполагает. . .
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
Как создать игру "Танчики" на Unity3d и C#
InfoMaster 14.01.2025
Разработка игр – это увлекательный процесс, сочетающий в себе творчество и технические навыки. В этой статье мы рассмотрим создание классической игры "Танчики" с использованием Unity3D и языка. . .
Организую платный онлайн микро-курс по доработке Android-клиента Telegram
_Ivana 14.01.2025
Официальная версия и распространенные форки не полностью устраивают? Сделай свою кастомную версию клиента! 4 занятия по 2 часа (2 недели пн, ср 19:00-21:00 по Москве). Первое вводное занятие. . .
Как создать приложение для фитнеса для iOS/iPhone на Kotlin
InfoMaster 14.01.2025
Создание собственного фитнес-приложения — это не только захватывающий, но и полезный процесс, ведь оно может стать вашим верным помощником на пути к здоровому и активному образу жизни. В современных. . .
Как создать приложение магазина для iOS/iPhone на Swift
InfoMaster 14.01.2025
Введение в разработку iOS-приложений Разработка приложений для iPhone и других устройств на базе iOS открывает огромные возможности для создания инновационных мобильных решений. В данной статье мы. . .
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution https:/ / www. cyberforum. ru/ blogs/ 223907/ blog8781. html прилагаю файл архива проекта в Gowin Eda. Восьмибитный счётчик из сумматора+ генератор сигнала. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru