Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сообщение компилятра [D7, XP]


Страницы:   1 2

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]

Или ты думаешь, что при вызове любой функции обязательно надо присваивать результат переменной?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо