IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Указатель как тип (синтаксис), С++Builder
сообщение
Сообщение #1


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


Есть кусок кода из делфёвой проги:
Posref = ^Position; //Тип: указатель на позицию
Lref = ^Leader; // Тип: указатель на заголовочный узел перехода
Tref = ^Trailer; //Тип: указатель на дугу
//Описание типа заголовочного узла перехода
Leader=Record
Key : Integer; // Имя заголовочного узла
Trail1 : Tref; //Указатель на список входящих дуг
Trail2 : Tref; //Указатель на список исходящих дуг
Next : Lref // Указатель на следующий узел в списке заголовочных узлов
end;
//Описание типа дугового узла
Trailer = Record
Id : Posref; //Указатель на ту позицию, в/из которой входит/выходит дуга
Count : Integer; //Количество дуг, связывающих эту позицию с переходом
Next : Tref //Указатель на следующую дугу
end;
//Описание типа позиции
Position = Record
Key : Integer;
Fishka : Byte;
Next : Posref;
end;


Как можно что-то аналогичное сделать?
Больше всего интересует проблема первых строк.
typedef *Leader LRef

не проходит (запятой ему не хватает, видите ли... но с запятой же получится совсем не то, что мне нужно?..)
Если это как-то делается, то остальное почти не изменится (ну, будет struct Leader и т.д.), а если нет - вообще непонятно....
Потому что если убрать первые 3 строки, а внутри структур заменить
Trail2 : Tref

на
Trailer *Trail1

пишет, что тип не указан.
Если эти структуры поменять местами, чтобы везде упоминались только описанные выше - говорит, что "too many types".
В общем, это... Хелп, плз.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


опять запуталась. в следующем месте...
void WorkPetri (Leader *m, int KolPer)
{
bool fl_loc,fl_all;
Leader *Perehody = new Leader;
Posicion *Posicii = new Posicion;
Trailer *Dugi = new Trailer;
do
{
Perehody = m; <----если я правильно понимаю, то одному указателю присваиваем значение другого
fl_all = 0;
for (int i=1;i++;i<=KolPer)
{
fl_loc = 1;
Dugi = *Perehody->Trail1; <---[C++ Error] Unit1.cpp(56): E2034 Cannot convert 'TTrailer' to 'TTrailer *'
.....


а на

Dugi = Perehody->Trail1;

соглашается.

Что такое эти Perehody? Указатель? Тогда разве не надо разыменовывать - мы же обращаемся к полю того объекта, на который он указывает.... То есть в Делфи эта строка выглядела
Dugi:=Perehody^.Trail1;


Возникла мысль, что написанное он воспринимает как разыменование указателя, хранящегося в поле.
Но на
Dugi = (*Perehody)->Trail1;

ругается не меньше:
[C++ Error] Unit1.cpp(56): E2288 Pointer to structure required on left side of -> or ->*


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 8.05.2024 5:25
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name