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

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

Ошибка при компиляции [D7, XP]


Nikos ©   (2005-12-12 21:48:00) 

Создаю в программе собственную процедуру. Объявляю ее в разделе privateвот код:
  private
   { Private declarations }
     procedure My;
 public
   { Public declarations }
var
 fmResult: TfmResult;
 x : Integer;
implementation

uses Main, Test;

{$R *.dfm}

procedure TfmResult.FormCreate(Sender: TObject);
....
My;
end;

procedure My;
begin
inc(x);
...
end;

Так вот, при компиляции выскакавате ошибка
[ Error] Result.pas(46): Unsatisfied forward or external declaration: 'TfmResult.My', то есть на строке, где я объявляю это процедуру после слова private.
Я думал, что эта ошибка из-за того, что я использую переменную х в своей процедуре, которая объявлена ниже, как переменная глобальная. Но дело в том, что примерно такой же синтаксис у меня в другом модуле и там все нормально. В чем тут дело?
Вот нашел каак избавится от это ошибке. Она исчезает если я переношу объявление этой процедуры под слово implementation. В этом случаи Delphi создает в место старого кода
implementation

uses Main, Test;

{$R *.dfm}

procedure TfmResult.FormCreate(Sender: TObject);
....

вот такой
implementation

uses Main;
 procedure ScaleLie;
uses Main, Test;

{$R *.dfm}

procedure TfmResult.FormCreate(Sender: TObject);

Не могли бы вы мне объяснить, почему так получается, в одном модуле нужно процедуру объявлять в private, а в другом после implementation?


ЮЮ   (2005-12-13 03:39:00) [1]

private
  { Private declarations }
    procedure My;

My - это, при таком написании, не процедура, а метод формы TfmResult.

Просто процедура пишется в секции implementation. А чтобы она была видна из других модуле, следует также заголовок процедуры поместить в секции inteface:

unit Unit1;

interface

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

type
 TForm1 = class(TForm)
 private
   { Private declarations }
   procedure MyPrivateMetod;
 public
   { Public declarations }
   procedure MyPablicMetod;
 end;

procedure MyProcedure;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure MyProcedure;
begin

end;

{ TForm1 }

procedure TForm1.MyPablicMetod;
begin

end;

procedure TForm1.MyPrivateMetod;
begin

end;

end.


Form1   (2005-12-12 22:09:00) [2]

Должно быть

procedure TForm1. My;
begin
inc(x);
...
end;


Наверх

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