![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
leniviy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: 1 Всего: 5 |
Привет. Есть не моя структура и существующий код, в котором объявляются указатели на неё с ключевым словом struct.
Можно ли задекларировать новый тип - синоним существующего, чтобы работал в .c и .cpp и переменные этого типа можно было объявлять с модификатором struct?
Похоже, что при объявлении нового типа он не помечается как "структура" |
|||
|
||||
math64 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
В объявлении typedef struct AAA BBB; BBB объявляется как тип, а не структура. В C имена структур и типов находятся в разных пространствах имён, ключевое слово struct обязательно, в C++ struct можно опускать, но использование struct перед именем типа запрещено в обоих языках.
Можно написать
|
|||
|
||||
leniviy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: 1 Всего: 5 |
да. Я уже в своё время намучился с макросом EOF.
|
|||
|
||||
Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 4 Всего: 39 |
Это сообщение отредактировал(а) Dem_max - 16.3.2009, 17:05 -------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
Dem_max, какое отношение имеет приведенный код к сабжу ?
|
|||
|
||||
Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 4 Всего: 39 |
mes,
чел хотел переопределение названия структуры -------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
не совсем так, eму требуется следующее : ![]() |
|||
|
||||
Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 4 Всего: 39 |
mes,
тогда struct THEAD stgr; или THEAD stgr; -------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
если структура заранее объявлена, как struct Т; то не получится Т тайпдефить к другой структуре. т.е не допустима такая последовательность :
именно обход этой проблемы и ищет тс, а причину описал math64: ![]() Это сообщение отредактировал(а) mes - 16.3.2009, 20:53 |
|||
|
||||
Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 4 Всего: 39 |
mes,
Я взял книжку 1990 года про СИ и привел пример, там от С++ и речи не вели. -------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
ParaPik |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 132 Регистрация: 8.1.2009 Репутация: нет Всего: нет |
Вообще, ключевое слово struct также используется для того, чтобы избежать неоднозначности. Т.е. существует два случая испоьзования struct:
1. Объявление структуры. 2. Решение неоднозначности. Например:
|
|||
|
||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
какая такая неоднозначность? если слово struct убрать - оно вообще не скомпилится ![]()
|
|||
|
||||
J0ker |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 4 Всего: 14 |
в C++ типы "T" и "struct T" эквивалентны - в отличии от plain C
|
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
ParaPik |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 132 Регистрация: 8.1.2009 Репутация: нет Всего: нет |
Дело в том, что C++, в отличии от других языков программирования, таких как C# и Java, позволяет объявлять переменную с тем же именем, что и название, в данном случае, структуры, но с другим типом(char, int, double и так далее). И чтобы указать компилятору, что вы имеете в виду именно тип структуру, то надо перед именем структуры поставить ключевое слово struct(это же относится и к ключевому слову class). А то, с чего началась данная тема, вообще зависит от реализации компилятора. Так что, некоторые старые компиляторы, а вполне возможно и новые, нормально воспримут код, написанный в начале темы.
Это сообщение отредактировал(а) ParaPik - 9.4.2009, 16:34 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |