OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 17 Июнь, 2025 12:36

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Хранение данных в TreeNode
СообщениеДобавлено: Среда, 17 Май, 2006 11:06 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 12:00
Сообщения: 79
Откуда: Россия, Санкт-Петербург
Не получается считать данные из TreeNode. :? Помогите разобраться.

Код:
MODULE StudyTree;

IMPORT   Dialog;

TYPE
   Tree* = RECORD tree*: Dialog.Tree END;
   Rec* = RECORD
      num*,
      info*: ARRAY 128 OF CHAR
   END;
   PRec* = POINTER TO Rec;   
   
VAR
   tree*: Tree;
   node*: Dialog.TreeNode;
   rec*: Rec;
   prec: PRec;
   str*: Dialog.String;
   
PROCEDURE BuildTree;
VAR n: Dialog.TreeNode;
BEGIN
      .......................
   n := tree.tree.NewChild(node, 0, str$);
   NEW(prec);
   prec.num := rec.num;
   prec.info := rec.info;   
   n.SetData(prec)
      .......................
END BuildTree;

PROCEDURE TreeNotifier*(op, from, to: INTEGER);
VAR n: Dialog.TreeNode;
BEGIN
   IF op = Dialog.changed THEN
      n := tree.tree.Selected();
      IF n # NIL THEN
         NEW(prec);
         prec := n.Data [X]; <- ????????
         ...............
      END;
   END;
   Dialog.Update(rec)
END TreeNotifier;

END StudyTree.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Хранение данных в TreeNode
СообщениеДобавлено: Среда, 17 Май, 2006 11:37 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1437
Вячеслав Бойко писал(а):
Код:
      IF n # NIL THEN
         NEW(prec);
         prec := n.Data [X]; <- ????????
   
      END;

1) Data - функция и вызывать надо n.Data()
2) она возваращает ANYPTR и его надо привести к типу prec.
3) К чему здесь NEW(prec)? Если нужна копия данных, надо явно разыменовавать.
Итого
Код:
   IF n # NIL THEN
      prec := n.Data() (PRec)
   END;

или
Код:
   IF n # NIL THEN
      NEW(prec);
      prec^ := n.Data() (PRec)^
   END;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Хранение данных в TreeNode
СообщениеДобавлено: Среда, 17 Май, 2006 12:37 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 12:00
Сообщения: 79
Откуда: Россия, Санкт-Петербург
Trurl писал(а):
2) она возваращает ANYPTR и его надо привести к типу prec.


Спасибо. Разобрался. Проблема была как раз с приведением к заданному типу. (Не так поставил вопрос :oops: )


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Понедельник, 30 Октябрь, 2006 18:39 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
А вот я не совсем понял. Сам только что столкнулся с этим.
Почему компилятор в (tn: TreeNode) SetData (data: ANYPTR) проглатывает переменную типа POINTER TO ..., а в (tn: TreeNode) Data (): ANYPTR обязательно требует переменную ANYPTR? На мой взгляд, это нелогично.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Понедельник, 30 Октябрь, 2006 20:23 
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
В каком смысле "требует"? В первом случае идет неявное безопасное преобразование типа указателя к базовому для всех указателей типу ANYPTR. Во втором случае процедура возвращает указатель типа ANYPTR, который мы сами должны преобразовать к конкретному типу - ведь компилятор на этапе компиляции не может знать, какого типа указатель будет во время выполнения сохранен. При этом явное преобразование также безопасно, т.к. во время выполнения будет проверено соответствие реального типа требуемому.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2025, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB