powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Классы Delphi
30 сообщений из 30, показаны все 2 страниц
Классы Delphi
    #39755883
Pokli
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть определение класса
Код:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
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;



Есть определение другого класса
Код:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
//класс "Дерево"
  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
Как решить данную проблему?
...
Рейтинг: 0 / 0
Классы Delphi
    #39755885
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не ясно зачем тебе var.

Сделай add функцией возвращающей TNode..
...
Рейтинг: 0 / 0
Классы Delphi
    #39755887
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PokliКак решить данную проблему?
Проще всего её решить выкидыванием ненужного и вредного метода Add. Но в любом случае, в ходе решения более важных и насущных проблем этого кода данная проблема исчезнет сама собой.
...
Рейтинг: 0 / 0
Классы Delphi
    #39755888
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pokli,

И покажи как метод вызываешь.
...
Рейтинг: 0 / 0
Классы Delphi
    #39755889
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad FPokli,

И покажи как метод вызываешь.
Небось вон то свойство Value передает.
...
Рейтинг: 0 / 0
Классы Delphi
    #39755897
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фэйтл Эра,

Не спугни, пусть сам расколется.))
...
Рейтинг: 0 / 0
Классы Delphi
    #39755908
Pokli
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vlad F,

Tree.Add(Tree.Value, sl);

Это нужно, чтобы рекурсивно добавлять элементы.

Код метода:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
//метод добавления элемента в дерево
Function TTree.Add(root: TNode; s:string):TNode;
Begin
   //если корень пуст то
  if root = nil then
  Begin
    //создаём его
    Result:=TNode.Create(s);
    exit;//выходим
  End;
  //если добавляемое значение меньше чем значение root.GetValue то
  //добавляем его в левое поддерево
  if AnsiLowerCase(s)<AnsiLowerCase(root.GetValue) then Result:=Add(root.Fleft,s)
  //иначе добавляем в правое поддерево
  else Result:=Add(root.FRight,s);
End;
...
Рейтинг: 0 / 0
Классы Delphi
    #39755909
Pokli
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вернее вот
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
//метод добавления элемента в дерево
Procedure TTree.Add(Var root: TNode; s:string):TNode;
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;
...
Рейтинг: 0 / 0
Классы Delphi
    #39755910
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PokliВернее вот
Код: pascal
1.
2.
//метод добавления элемента в дерево
Procedure TTree.Add(Var root: TNode; s:string):TNode;


Жжош.
...
Рейтинг: 0 / 0
Классы Delphi
    #39755911
Pokli
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Фэйтл Эра,

Да я пробовал сделать функцией, от неё осталось.
...
Рейтинг: 0 / 0
Классы Delphi
    #39755913
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
program Project6;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;

type

  TNode=class
  private
    FValue:string;
    FLeft,FRight:TNode;
  public
    constructor Create(s: string);
    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 }

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.Value) then Add(root.Fleft,s)
  //иначе добавляем в правое поддерево
  else Add(root.FRight,s);
end;

{ TNode }

constructor TNode.Create(s: string);
begin
  Value:=s;
end;

begin
end.



Все компилиться.
...
Рейтинг: 0 / 0
Классы Delphi
    #39755918
Pokli
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rgreatВсе компилиться.
Хм, компилиться, а когда на форме не компилится. Ругается что поля закрытые.
...
Рейтинг: 0 / 0
Классы Delphi
    #39755920
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PoklirgreatВсе компилиться.
Хм, компилиться, а когда на форме не компилится. Ругается что поля закрытые.
Это у тебя ручонки кривые, в комплекте к косым глазонькам.
...
Рейтинг: 0 / 0
Классы Delphi
    #39755923
Pokli
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Фэйтл ЭраPokliпропущено...

Хм, компилиться, а когда на форме не компилится. Ругается что поля закрытые.
Это у тебя ручонки кривые, в комплекте к косым глазонькам.
Когда они в одном модуле то компилится, не спорю, а когда в разных - нет.
...
Рейтинг: 0 / 0
Классы Delphi
    #39755928
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pokli,

Ты справишься! Мы в тебя верим!
...
Рейтинг: 0 / 0
Классы Delphi
    #39755938
Pokli
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Переделал метод. Сделал без рекурсии.
Всем спасибо.
...
Рейтинг: 0 / 0
Классы Delphi
    #39755949
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pokli,

А мне вот другое в этой связи интересно, зачем плодить проперти, все равно открывая в них полный доступ ко внутреннему приватному полю? Что за мода такая? Ведь если это самое Value переопределить как простое публичное свойство, то ничего бы и не пришлось переделывать на "безрекурсии".))
...
Рейтинг: 0 / 0
Классы Delphi
    #39756824
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad FА мне вот другое в этой связи интересно, зачем плодить проперти, все равно открывая в них полный доступ ко внутреннему приватному полю? Что за мода такая? Ведь если это самое Value переопределить как простое публичное свойство полеЗатем, что свойство может обрасти впоследствии сеттереом и/или геттером
...
Рейтинг: 0 / 0
Классы Delphi
    #39756829
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Vlad FА мне вот другое в этой связи интересно, зачем плодить проперти, все равно открывая в них полный доступ ко внутреннему приватному полю? Что за мода такая? Ведь если это самое Value переопределить как простое публичное свойство полеЗатем, что свойство может обрасти впоследствии сеттереом и/или геттером
Дичь какая-то.
...
Рейтинг: 0 / 0
Классы Delphi
    #39756831
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

Может и оборасти. Но ведь может и не обрасти. А пока что, совершенно очевидно, что оно ему мешает воспарить к самым вершинам в иссскустве программирования. Жертвой чего пала даже технологически полезная рекурсия.))
...
Рейтинг: 0 / 0
Классы Delphi
    #39756832
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Затем, что свойство может обрасти впоследствии сеттереом и/или геттером
Не вижу проблемы. Когда обрастёт - тогда и можно сделать свойством, на код это не повлияет (а в тех редких случаях, когда повлияет - хорошо, что проблема станет видна).
...
Рейтинг: 0 / 0
Классы Delphi
    #39756833
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фэйтл Эра,

Дикий народ, - изумлялись туристы. Дети гор!))
...
Рейтинг: 0 / 0
Классы Delphi
    #39757642
Beltar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
var - передача параметра по ссылке с возможностью записи.
константа - не предполагает записи.

Я один вижу тут взаимоисключающие параграфы?

А вообще все давно в TTreeList или как там этот класс дерева для TTreeView сделано.
...
Рейтинг: 0 / 0
Классы Delphi
    #39757653
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Beltar,

Поднимите мне веки, - где там константа?))
...
Рейтинг: 0 / 0
Классы Delphi
    #39757686
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F,

а что, по-твоему, есть использование метода в качестве аргумента? А сипипишнвх ссылок в дельфях пока что нетути. Указатели только.
...
Рейтинг: 0 / 0
Классы Delphi
    #39757697
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фэйтл Эра,

Использования property в качестве var-параметра. А то что компилятор выдал на это сентенцию про константу, только запутало аффтара. Жертвой чего пала, возможно, достаточно полезная (не разбирался) рекурсия.))
...
Рейтинг: 0 / 0
Классы Delphi
    #39757710
Beltar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"constant object cannot be passed as var parameter"

Хотя с property, конечно, другая тема немного. Для новичка не совсем очевидная.

Классы в Delphi, а тем более строки, есть ссылки в чистом виде. Какие ссылки есть в C++, когда там одни указатели, я что-то не вижу.

Это без учета того, что "переменная - это именованная область памяти". Т. е. обращаясь к переменной мы уже куда-то ссылаемся.
...
Рейтинг: 0 / 0
Классы Delphi
    #39757713
Beltar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно один из видов мозговых травм, которые наносит C++ - это упоротость в разные названия совершенно одинаковых сущностей с фанатичным возведением тех, или иных техник в культ. Что неудивительно для языка, который был придумал исключительно в рамках "единственно правильной ООП-парадигмы", причем поверх "синтаксически усовершенствованного ассемблера", что просто взаимоисключающие параметры.

Ссылка - это типизированный указатель. ВСЁ.
...
Рейтинг: 0 / 0
Классы Delphi
    #39757718
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Beltar> Собственно один из видов мозговых травм, которые наносит C++

У нас тут есть твой единомышленник - defecator.
Вы бы друг другу бальзам на душу лили прям. :)

> это упоротость в разные названия совершенно одинаковых
> сущностей с фанатичным возведением тех, или иных техник в культ

Лично я не понял, что ты пытался сказать. Лучше примером.
Моя основная претензия к С++ *как языку* - на нём тупо
менее удобно работать после других языков (C#, Delphi),
но и это дело привычки, через неделю-другую привыкаешь.
Как стеку технологий - другой вопрос, это уже не язык.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Классы Delphi
    #39757720
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Beltar,

Когда вы говорите, Иван Васильевич, впечатление такое, что вы бредите (с))
...
Рейтинг: 0 / 0
30 сообщений из 30, показаны все 2 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Классы Delphi
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]