![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ошибка периода компиляции [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);