![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сообщение компилятра [D7, XP]
Laguna © (2011-11-17 21:52:00)В программе есть такой код
procedure TZ_ArendaFrm.LoadRegion;
Var
Node : TTreeNode;
PID : PTreeID;
i : Integer;
begin
Node := nil;
with TreeView1.Items do
begin
BeginUpdate;
Clear;
if RegInf.Kod in MogDomenSet then
for i := Low(Rups_A) to High(Rups_A) do
begin
New(PID);
PID.Kod := Rups_A[i].Kod;
Node := AddObject(Node, Trim(Rups_A[i].Name), PID);
end
else
begin
New(PID);
PID.Kod := RegInf.Kod;
Node := AddObject(Node, Trim(RegInf.Name), PID);
end;
EndUpdate;
end;
end;
Почему при компиляции на выделенной строке постоянно появляется предупреждение Value assigned to 'Node' never used
Игорь Шевченко (2011-11-18 00:35:00) [1]
> Почему при компиляции на выделенной строке постоянно появляется
> предупреждение Value assigned to 'Node' never used
> А вот грубить на надо!
> Я смотрю тут ваще предвзятое отношение "якобы спецов" к
> несовсем все знающим.
Ты тоже можешь стать знающим, встав на ошибку и нажав на кнопку F1.
Для этого не требуется писать на форум.
Германн (2011-11-18 00:24:00) [2]Удалено модератором
Jeer (2011-11-18 00:02:00) [3]Удалено модератором
Jeer (2011-11-17 23:43:00) [4]Удалено модератором
Laguna (2011-11-17 23:18:00) [5]> Сусл_ (17.11.11 22:37) [11]
> во втором случае убире Node := а в первом оставь.
Спасибо за наводочку ;)
Сусл_ (2011-11-17 23:07:00) [6]все верно понял.
Laguna (2011-11-17 23:01:00) [7]Все, кажется я понял.
Изначально Node = Nil. В первом блоке Node переприсваивается и используется потому что учавствует в цикле и слушит точкой отсчета для следующей. А там где формируется только одна ветка достаточно было написать TreeView1.Items.AddObject(Node...) Поэтому внутри With будет правильным AddObject(Node(или Nil)...
...
with TreeView1.Items do
AddObject(Node, Trim(RegInf.Name), PID);
...
Jeer (2011-11-17 22:54:00) [8]
> Да, действительно
Когда дойдет, что надо составлять КА, анализировать всевозможные исходы и принимать во внимание возможность неиспользования в какой-либо ветке переменной(ных) - приходи опять.
Побеседуем вновь.
Laguna (2011-11-17 22:46:00) [9]> Сусл_ (17.11.11 22:40) [15]
> ты чот код изменил. в исходном нет Selected.если в исходном
> уберешь Node := во втором случае, то предупрж. не будет.
Да, действительно не появляется сообщение как убрал во втором месте Node. И первый и второй случай равнозначныпо применению. Просто в зависимости от условия дерево состит или (к примеру) из 20 веток или только из одной.
Плохиш (2011-11-17 22:44:00) [10]
> Почему же тогда на первую Node не ругается?
Круто, оно даже не понимает, чë же оно там накодило...
Сусл_ (2011-11-17 22:41:00) [11]
> Омлет © (17.11.11 22:40) [14]
> > Сусл_ (17.11.11 22:36) [10]
>
> Node у него используется в AddObject как родительская ветка.
>
да понял я, поправился уже. я про второе присвоение
Омлет (2011-11-17 22:40:00) [12]> Сусл_ (17.11.11 22:36) [10]
Node у него используется в AddObject как родительская ветка.
Сусл_ (2011-11-17 22:40:00) [13]ты чот код изменил.
в исходном нет Selected.
если в исходном уберешь Node := во втором случае, то предупрж. не будет.
Сусл_ (2011-11-17 22:39:00) [14]и лучше писать
beginudpdate;
try
...
finally
endupdate;
end;
Laguna (2011-11-17 22:38:00) [15]Ну можно так завершить, только всеравно пердупреждение появляется.
...
else
begin
New(PID);
PID.Kod := RegInf.Kod;
Node := AddObject(Node, Trim(RegInf.Name), PID); - 2
end;
Node := TreeView1.Items[0];
TreeView1.Selected := Node;
Сусл_ (2011-11-17 22:37:00) [16]не чот не то сказал)))
во втором случае убире Node := а в первом оставь.
Сусл_ (2011-11-17 22:36:00) [17]напиши просто
AddObject(Node, Trim(Rups_A[i].Name), PID);
и все. а node вообще удали. тебе эта переменная не нужна просто.
Inovet (2011-11-17 22:33:00) [18]> [5] Laguna © (17.11.11 22:23)
> А как мне дерево сформировать, если не присваивать веткам
> имена, в моем случае еще и объект дополнительный.
После этого где он используется. Ты с таким гонором отвечаешь, как будто компилятор тупой и глючный, а заодно и все здеь кроме тебя, конечно, выдаёт тебе на пустом месте предупреждения. Тебе же сказали, - не используется, - так и посмотри где есть присвоение и неисползование после.
Node := AddObject(Node, ...
Laguna (2011-11-17 22:33:00) [19]
> Компилятор внятно говорит: "Значение, присвоенное Node,
> нигде не используется." - не понятно разве?
С английским я дружу.
По коду видно, что Node может принимать значение исходя из условия в том или ином случае. Почему же тогда на первую Node не ругается?
if RegInf.Kod in MogDomenSet then
for i := Low(Rups_A) to High(Rups_A) do
begin
New(PID);
PID.Kod := Rups_A[i].Kod;
Node := AddObject(Node, Trim(Rups_A[i].Name), PID);- 1
end
else
begin
New(PID);
PID.Kod := RegInf.Kod;
Node := AddObject(Node, Trim(RegInf.Name), PID);- 2
end;
Омлет (2011-11-17 22:28:00) [20]Или ты думаешь, что при вызове любой функции обязательно надо присваивать результат переменной?