Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.01;
Скачать: CL | DM;

Вниз

Ошибка при компиляции   Найти похожие ветки 

 
Nikos   (2005-12-12 21:48) [0]

Создаю в программе собственную процедуру. Объявляю ее в разделе 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?


 
Form1   (2005-12-12 22:09) [1]

Должно быть

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


 
ЮЮ ©   (2005-12-13 03:39) [2]

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.



Страницы: 1 вся ветка

Текущий архив: 2006.01.01;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.025 c
2-1134660329
Acrob@t
2005-12-15 18:25
2006.01.01
тестирующая программа


14-1133871967
Kerk
2005-12-06 15:26
2006.01.01
Точки


14-1134044465
syte_ser78
2005-12-08 15:21
2006.01.01
Вопрос по Апачу


4-1130502177
Jimm
2005-10-28 16:22
2006.01.01
Убрать границы у combobox, button ...


14-1133945351
Stilgar
2005-12-07 11:49
2006.01.01
Что вы думаете о конце света?