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