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

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

ошибка периода компиляции [D7]


yagluboko ©   (2010-04-29 01:21:00) 

Доброго всем времени суток. Тут такая проблемка- не могу понять, что не так: компилятор пишет такую вот ошибку: Unit1.pas(31): Unsatisfied forward or external declaration: 'TForm1.PrintTree'. Пожалуйста, подскажите, в чём здесь дело? Вот код:

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TNode = ^PNode;
 PNode = record
   Key: string;
   Left, Right: TNode;
 end;
 TForm1 = class(TForm)
   OpenButton: TButton;
   WorkButton: TButton;
   CloseButton: TButton;
   Memo1: TMemo;
   ListBox1: TListBox;
   OpenDialog1: TOpenDialog;
   procedure OpenButtonClick(Sender: TObject);
   procedure WorkButtonClick(Sender: TObject);
   procedure PrintTree (Tree: TNode);
   procedure Search(x: string; var Tree: TNode);
   procedure DeleteTree (var Tree: TNode);
   procedure CloseButtonClick(Sender: TObject);

 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 x: string;
 Tree: TNode;

implementation

{$R *.dfm}

procedure TForm1.DeleteTree(var Tree: TNode);
begin
 if Tree <> nil then
 with Tree^ do
 begin
   DeleteTree (Left);
   Dispose (Tree);
   DeleteTree (Right);
 end;
end;

procedure TForm1.OpenButtonClick(Sender: TObject);
begin
 if OpenDialog1.Execute then
 begin
   Memo1.Clear;
   Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
 end;
end;

procedure TForm1.Search(x: string; var Tree: TNode);
begin
 if Tree = nil then
 begin
   new (Tree);
   with Tree^ do
   begin
     Key := x;
     Left := nil;
     Right := nil;
   end;
 end else
   if x < Tree^.Key then
     Search(x, Tree^.Left)
   else
     if x > Tree^.Key then
       Search(x, Tree^.Right)
     else
       Exit;
end;

procedure PrintTree (Tree: TNode);
begin
 if Tree <> nil then
 begin
   PrintTree (Tree^.Left);
   Form1.ListBox1.Items.Add(Tree^.Key);
   PrintTree (Tree^.Right);
 end;
end;

procedure TForm1.WorkButtonClick(Sender: TObject);
const
 MySet = [' ', '.', ',', ';', ':', '!', '?', '(', ')', '[', ']', '{', '}', '-',
 '+', '/', '\', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0'];
var
 i, j: integer;
 s, s0: string;
begin
 for i := 0 to Memo1.Lines.Count - 1 do
 begin
   s := Memo1.Lines[i];
   s0 := '';
   j := 0;
   while j < Length(s) do
   begin
     inc(j);
     if not (s[j] in MySet) then
       s0 := s0 + s[j]
     else
       Search(x, Tree);
   end;
 end;
 PrintTree (Tree);
end;

procedure TForm1.CloseButtonClick(Sender: TObject);
begin
 DeleteTree (Tree);
 Close;
end;

end.


Anatoly Podgoretsky   (2010-04-29 07:37:00) [1]

> yagluboko  (29.04.2010 01:21:00)  [0]

Наверно у тебя реализация метода отсутствует, да что там наверно, когда так и есть


Германн   (2010-04-29 02:45:00) [2]

Когда же вы перестанете быть чукчами. :)


Германн   (2010-04-29 02:09:00) [3]


> procedure PrintTree (Tree: TNode);

Процедура объявлена как метод класса. А реализована как простая процедура.
Замени
> procedure PrintTree (Tree: TNode);
> begin
>

на TForm1.PrintTree (Tree: TNode);


Наверх

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