Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.01.2019, 15:35   #1
Artem78
 
Регистрация: 10.02.2012
Сообщений: 8
Восклицание Классы Delphi

Есть определение класса
Код:
TNode=class
private
  FValue:string;
  FLeft,FRight:TNode;
public
  property Left: TNode read FLeft write FLeft;
  property Right: TNode read FRight write FRight;
  property Value: string read FValue write FValue;
end;
Есть определение другого класса
Код:
//класс "Дерево"
  TTree = class
  private
   Froot: TNode;
  public
    //Процедура добавления узла в дерево
    Procedure Add(var root: TNode; s:string);
    //свойство для получения значения Froot
    property Value: TNode read Froot write Froot;
  end;{TTree}
И вот при вызове метода Add класса TTree выскакивает следующая ошибка: constant object cannot be passed as var parameter
Как решить данную проблему?
Artem78 вне форума Ответить с цитированием
Старый 04.01.2019, 15:56   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

А var зачем?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 04.01.2019, 16:00   #3
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Из TTree убрать var
В TNode добавить метод Assign.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 04.01.2019, 17:10   #4
Artem78
 
Регистрация: 10.02.2012
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Pavia Посмотреть сообщение
Из TTree убрать var
В TNode добавить метод Assign.
Не совсем понял, как это поможет.
Artem78 вне форума Ответить с цитированием
Старый 04.01.2019, 17:11   #5
Artem78
 
Регистрация: 10.02.2012
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
А var зачем?
В методе Add рекурсия, рекурсивно добавляется элемент.
Artem78 вне форума Ответить с цитированием
Старый 04.01.2019, 17:15   #6
Artem78
 
Регистрация: 10.02.2012
Сообщений: 8
По умолчанию

Код метода:
Код:
//метод добавления элемента в дерево
Procedure TTree.Add(Var root: TNode; s:string);
Begin
   //если корень пуст то
  if root = nil then
  Begin
    //создаём его
    root:=TNode.Create(s);
    exit;//выходим
  End;
  //если добавляемое значение меньше чем значение root.GetValue то
  //добавляем его в левое поддерево
  if AnsiLowerCase(s)<AnsiLowerCase(root.GetValue) then Add(root.Fleft,s)
  //иначе добавляем в правое поддерево
  else Add(root.FRight,s);
End;

Последний раз редактировалось Artem78; 04.01.2019 в 17:20.
Artem78 вне форума Ответить с цитированием
Старый 04.01.2019, 19:41   #7
Artem78
 
Регистрация: 10.02.2012
Сообщений: 8
По умолчанию

Переделал метод. Сделал без рекурсии.
Всем спасибо.
Artem78 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Классы на Delphi DVMade Помощь студентам 1 13.12.2012 20:27
Delphi классы Аделинкка Помощь студентам 3 13.11.2012 18:45
Классы в Delphi wertret Помощь студентам 9 01.05.2012 13:16
Классы в Delphi. weader4 Общие вопросы Delphi 3 14.02.2011 01:21
Классы (Delphi) Kreaman Помощь студентам 2 14.02.2009 16:02