Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
2 / 2 / 2
Регистрация: 22.01.2013
Сообщений: 59
1

Структура "двоичное дерево", ошибка "неполный тип"

02.07.2013, 21:17. Показов 1303. Ответов 7
Метки нет (Все метки)

Вот структура узла:
C
1
2
3
4
5
typedef   struct   node {
       char* info;
       int key;   
       struct node branch[2];  // тут ошибка
 } Node;
Компилятор жалуется, мол там неполный тип. Как исправить так, чтоб через массив работало?
PS именно через массив, потому как дальнейший код опирается на это.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.07.2013, 21:17
Ответы с готовыми решениями:

Списки. Ошибка "недопустимый неполный тип"
В 30-й строке ругается на второй Zv Цель программы. Используя динамическую структуру список,...

Создать запись "Двигатель", которая содержит элементы "Название", "Мощность", "Скорость", "Цена"
Создать запись "Двигатель", которая содержит элементы "Название", "Мощность", "Скорость",...

Структура "Хоккеист" и файлы с двумя командами: "Динамо" и "Спартак"
Создать 2 файла, содержащего сведения об игроках хоккейных команд "Динамо" и "Спартак". Структура...

Динамическая память. Ошибка С2143 пишет отсутствие ";" перед "тип" (Visual Studio 2010)
Это код filesIO.c Чтение данных для выч. модуля программы из файла (вектора X, чисел N, M; inNm...

__________________
7
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16827 / 6705 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
02.07.2013, 21:23 2
Цитата Сообщение от Dummy_1 Посмотреть сообщение
C
1
branch[2]
C
1
*branch
?
0
2 / 2 / 2
Регистрация: 22.01.2013
Сообщений: 59
02.07.2013, 22:21  [ТС] 3
неа, дальше множество ошибок вылезает, хотя на тип уже не жалуется

Добавлено через 2 минуты
я наверно понял в чём дело) я обращаюсь к ветви неправильно

сейчас так:
C
1
it = it->branch [dir];
а как надо?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16827 / 6705 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
02.07.2013, 22:26 4
так, стоп. Это же вложенная "сама в себя" структура получается? Таким образом не получится, только через указатели.
Почему нельзя - вот почему
1 Объявляем структуру node
1.1 поле info
1.2 поле key
1.3 Объявляем структуру node
1.3.1 поле info
1.3.2 поле key
1.3.3 объявляем структуру node
.........
Итого, получаем рекурсивное "создание структуры". Только у вас еще и массивом.. Поэтому таким образом нельзя сделать, только через указатели

Или я неверно понял ваш код..
1
2 / 2 / 2
Регистрация: 22.01.2013
Сообщений: 59
02.07.2013, 22:35  [ТС] 5
структуру поправил, определить направление как показано выше уже не получается. почему так? память не выделена что ли?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16827 / 6705 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
02.07.2013, 22:49 6
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

вам надо как-то так
C
1
2
3
4
5
6
7
8
9
10
11
typedef struct
{
    //ваши поля
} _branch;
 
typedef struct
{
    char* info;
    int key;   
    _branch branch[2];
 } Node;
а потом обращаться
C
1
it.branch->dir
или через точку, я не знаю как у вас..
1
2 / 2 / 2
Регистрация: 22.01.2013
Сообщений: 59
02.07.2013, 22:55  [ТС] 7
то есть по сути создаём новую структуру, что бы впихнуть в другую массив из первой. это я понял)

а у меня в оригинале было так:
C
1
2
dir = root->key < key;
                root->branch [dir] = insert_r (root->branch [dir], key, info);
dir это целое.
0
Эксперт С++
5816 / 3468 / 356
Регистрация: 08.02.2010
Сообщений: 7,448
03.07.2013, 09:55 8
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Цитата Сообщение от Dummy_1 Посмотреть сообщение
Компилятор жалуется, мол там неполный тип
И правильно. В точке трансляции, в которой возникает ошибка, тип node является неполным (incomplete). В результате у компилятора нет достаточной информации, чтобы определить размер структуры node, и, как следствие, он не может создать массив элементов этой структуры (массив типов неизвестного размера считается неполным типом).Для подробностей смотрим 6.2.5 Types.

Цитата Сообщение от Dummy_1 Посмотреть сообщение
Как исправить так, чтоб через массив работало?
C
1
2
3
4
5
6
struct node
{
    char *info;
    int key;
    struct node *branch[2];
};
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.07.2013, 09:55

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Синтаксическая ошибка: отсутствие ";" перед "тип"
Всем привет. Почему когда создаю переменную после scanf дает error. А если объявлять 'aaa' верху...

Синтаксическая ошибка: отсутствие "; " перед "тип"
подскажите в настройке visual studio 2008 #include &lt;stdio.h&gt; #define SIZE 10 int* getMaxMin(int...

Функция замены ":" на "_" в названии файла и ошибка "undefined reference to 'strcat'"
Добрый день,прошу помочь мне с такой проблемой: В общем есть функция,работающая с именем...

Ошибка в 3 строчках: Синтаксическая ошибка: отсутствие ";" перед "тип"
Вот написал я: #include &quot;locale.h&quot; int main() { setlocale(LC_ALL, &quot;&quot;); char *str =...


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

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

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