![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() |
мисс_граффити |
![]()
Сообщение
#1
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
Есть кусок кода из делфёвой проги:
Posref = ^Position; //Тип: указатель на позицию Как можно что-то аналогичное сделать? Больше всего интересует проблема первых строк. typedef *Leader LRef не проходит (запятой ему не хватает, видите ли... но с запятой же получится совсем не то, что мне нужно?..) Если это как-то делается, то остальное почти не изменится (ну, будет struct Leader и т.д.), а если нет - вообще непонятно.... Потому что если убрать первые 3 строки, а внутри структур заменить Trail2 : Tref на Trailer *Trail1 пишет, что тип не указан. Если эти структуры поменять местами, чтобы везде упоминались только описанные выше - говорит, что "too many types". В общем, это... Хелп, плз. -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Не знаю, что в Builder-е, но чистый C в виде TC3.0 компилирует вот это без ошибок:
typedef struct TLeader { |
мисс_граффити |
![]()
Сообщение
#3
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
все. Архангельскому не верю напрочь.
![]() Второй раз пробую разобраться с вопросом по его книжке (точнее, по приведенным там примерам). спасибо большое! З.Ы. Position, Leader и Trailer - это переменные соответствующего типа? Если мне где-то еще надо объявлять переменные такого типа, то писать, например, struct TLeader L1 ? -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Не обязательно...
struct TLeader L1 совершенно эквивалентно Leader L1, а зачем набирать больше? ![]() |
мисс_граффити |
![]()
Сообщение
#5
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
запуталась.
Leader - это что? переменная типа TLeader? как мы тогда можем объявлять L1 такого типа? и почему тогда пишется внутри структуры struct TPosition *Next; ? или здесь тоже можно и так, и так? -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Юля, не путай описание и определение типа, это может привести к очень плохим результатам, особенно в С/С++. Что мы делаем здесь:
typedef struct TLeader {? Делаем для типа struct TLeader { ... } новое имя: Leader, правда? Точно так же, как и typedef unsigned char byte;определяет новое имя byte для типа unsigned char Теперь, почему нельзя пользоваться таким определением: typedef struct TLeader {потому, что к тому моменту, как компилятор обрабатывает эту запись, тип Trailer еще не определен, и тип Leader тоже (не встретилась еще завершающая описание точка с запятой). Чтобы можно было показать компилятору, что это будет указатель на структуру, используется предварительное описание (чувствуешь разницу, да?) - указателя на структуру. Все остальное для компилятора неважно, он зарезервирует 4 байта под указатель на структуру, и когда этот тип будет определен (ниже по тексту), свяжет его с этим указателем. ![]() С, что поделаешь... |
мисс_граффити |
![]()
Сообщение
#7
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
понятно. больше не буду путать
![]() спасибо огромное. буду на выходных писать новый вариант этой <надоевшей> имитации сети Петри. -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
мисс_граффити |
![]()
Сообщение
#8
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
откомпилировалось только в таком варианте:
typedef struct TPosicion { то есть после изменения порядка и имени TPosition на TPosicion -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
volvo |
![]()
Сообщение
#9
|
Гость ![]() |
Ну, возможно просто конфликт имен (в Builder-е нет структуры TPosition, случайно?)
Обрати внимание, что структура TTrailer все-же определена ниже, чем используется ее описание, так что скорее всего - именно совпадающие имена послужили причиной отказа компилироваться... ![]() |
мисс_граффити |
![]()
Сообщение
#10
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
опять запуталась. в следующем месте...
void WorkPetri (Leader *m, int KolPer) а на
соглашается. Что такое эти Perehody? Указатель? Тогда разве не надо разыменовывать - мы же обращаемся к полю того объекта, на который он указывает.... То есть в Делфи эта строка выглядела Dugi:=Perehody^.Trail1; Возникла мысль, что написанное он воспринимает как разыменование указателя, хранящегося в поле. Но на Dugi = (*Perehody)->Trail1; ругается не меньше: [C++ Error] Unit1.cpp(56): E2288 Pointer to structure required on left side of -> or ->* -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
volvo |
![]()
Сообщение
#11
|
Гость ![]() |
Цитата Что такое эти Perehody? Указатель? Тогда разве не надо разыменовывать - мы же обращаемся к полю того объекта, на который он указывает.... Нет... В С++ для обращения к полю структуры есть 2 способа:Dugi = Perehody->Trail1; // Если Perehody - указатель на структуру Так что разыменовывать ничего не надо... |
мисс_граффити |
![]()
Сообщение
#12
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
Спасибо...
офф. Вся группа накопировала лабы, которые даже изменять не придется, из FAQа. Куда написать коллективную благодарность? ![]() -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
![]() ![]() |
![]() |
Текстовая версия | 19.06.2025 23:07 |