Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Самоадресуемая структура


Автор: ksili 11.1.2006, 10:15
Для организации списка объектов создаю самодресуемую структуру. Для объявления использую стандартный синтаксис из учебников:
Код

typedef struct
    {
     TGruz pusto;
     TAir *Nextair;
    }TAir;

Но почему-то не работает. Ошибка "Type name expected"
У чём дело? Пишу на BCB6

Автор: Neitron 11.1.2006, 10:22
Код

struct TAir
{
     TGruz pusto;
     TAir *Nextair;
};

Автор: ksili 11.1.2006, 11:41
Теперь работает. Странно почему с typedef не работало? Тема закрыта

Автор: azesmcar 11.1.2006, 12:07
Цитата
Странно почему с typedef не работало?


Потому что TAir обьявлен ниже, а ты его используешь в своей структуре...

На строчке
Код

TAir *Nextair;

Компилятор еще не знает кто такой TAir

Правильней будет так
Код

struct _TAir
{
     TGruz pusto;
     TAir *Nextair;
};
typedef _TAir TAir;

потому что некоторые компиляторы (такие как GCC в Hp-Unix) будут выдавать ошибку в коде типа
Код

TAir Nextair;

правильно будет в таком случае обьявлять так
Код

struct TAir Nextair;

Автор: Neitron 11.1.2006, 15:37
Цитата(ksili @ 11.1.2006, 11:41)
Теперь работает. Странно почему с typedef не работало? Тема закрыта

А зачем тебе typedef??/
Это вообще фича только для удобсва, и несуществует случаев когда нельзя без неё обойтись...

Автор: pablo 11.1.2006, 15:49
с таипдефом будет так:
Код

 typedef struct _TAir
 {
     TGruz pusto;
     TAir *Nextair;
 }  TAir;

Автор: azesmcar 11.1.2006, 16:10
Цитата
А зачем тебе typedef??/
Это вообще фича только для удобсва, и несуществует случаев когда нельзя без неё обойтись...


Ну вообще его для приведенного мною случая пишут в основном...
чтобы struct перед обявлением не писать..
правильней с typedef -ом писать...как сказал pablo или описать структуру потом делать typedef..
Добавлено @ 16:11
Переносимость кода однако...smile

Автор: ksili 12.1.2006, 05:15
Я typedef писал, чтоб struct перед объявлением не писать, но как оказалось в BCB6 и без typedef'а катит

Автор: srd 12.1.2006, 10:31
Этот фокус с typedef нужен только в plain C! В С++ имя структуры без struct можно использовать везде, где требуется имя типа.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)