Меню

Delphi ошибка unsatisfied forward or external declaration

I am getting an error while compiling .pas file.

«unsatisfied forward or external declaration :TxxxException.CheckSchemeFinMethodDAException.»

Does anyone have any idea what this error implies?

Does it mean that
CheckSchemeFinMethodDAException was not called in all the concerned files?

Toby Allen's user avatar

Toby Allen

10.9k11 gold badges74 silver badges124 bronze badges

asked Aug 19, 2009 at 16:36

vas's user avatar

You have declared this method but didn’t implement it.

answered Aug 19, 2009 at 16:49

Uwe Raabe's user avatar

Uwe RaabeUwe Raabe

44k3 gold badges85 silver badges127 bronze badges

1

you may have forgotten to put the class name before the function name within the implementation section. for example, the following code will yield your error:

unit Unit1;

interface

type
  TMyClass = class
    function my_func(const text: string): string;
  end;

implementation

function my_func(const text: string): string;
begin
  result := text;
end;

end.

to fix, just change the function implementation to TMyClass.my_func(const text: string): string;.

answered May 23, 2013 at 9:03

mulllhausen's user avatar

mulllhausenmulllhausen

4,2937 gold badges46 silver badges69 bronze badges

unit Unit1;

interface

type
  TMyClass = class
    procedure DeclaredProcedure;
  end;

implementation

end.

This yields the error you describe. The procedure DeclaredProcedure is declared (signature) but not defined (implementation part is empty).

You have to provide an implementation for the procedure.

answered Aug 19, 2009 at 18:07

jpfollenius's user avatar

jpfolleniusjpfollenius

16.3k9 gold badges89 silver badges156 bronze badges

Go Up to Error and Warning Messages (Delphi)

This error message appears when you have a forward or external declaration of a procedure or function, or a declaration of a method in a class or object type, and you don’t define the procedure, function or method anywhere.

Maybe the definition is really missing, or maybe its name is just misspelled.

Note that a declaration of a procedure or function in the interface section of a unit is equivalent to a forward declaration — you have to supply the implementation (the body of the procedure or function) in the implementation section.

Similarly, the declaration of a method in a class or object type is equivalent to a forward declaration.

program Produce;

type
  TMyClass = class
  constructor Create;
  end;

function Sum(const a: array of Double): Double; forward;

function Summ(const a: array of Double): Double;
var
  i: Integer;
begin
  Result := 0.0;
  for i:= 0 to High(a) do
  Result := Result + a[i];
end;

begin
end.

The definition of Sum in the above example has an easy-to-spot typo.

program Solve;

type
  TMyClass = class
  constructor Create;
  end;

constructor TMyClass.Create;
begin
end;

function Sum(const a: array of Double): Double; forward;

function Sum(const a: array of Double): Double;
var
  i: Integer;
begin
  Result := 0.0;
  for i:= 0 to High(a) do
  Result := Result + a[i];
end;

begin
end.

The solution: make sure the definitions of your procedures, functions and methods are all there, and spelled correctly.

Задача: При компиляции проекта возникает ошибка E2065 Unsatisfied forward or external declaration.
Инструментарий: Delphi
Решение:
При компиляции проекта появилась ошибка

[dcc32 Error] <Module Name>.pas(<Line Number>): E2065 Unsatisfied forward or external declaration: ‘<Class Name>.<Method Name>


Рассмотрим упрощенный вариант кода который привел к ошибке:


...
type
TA = class
public
procedure DoSomesting; // <= ошибка тут
end;

implementation

end.

В целом если рассмотреть упрощенны вариант все стает предельно ясно. Нет реализации для метода (в моем варианте это метод DoSomesting). Для решения проблемы — нужно добавить реализацию для метода.


...
type
TA = class
public
procedure DoSomesting;
end;

implementation

procedure TA.DoSomesting;
begin
//
end;

end.

PS: Для автоматической генерации метода в секции implementation можно воспользоваться сочетаем клавиш Ctrl+Shift+C. (Только сперва установите курсор в область описания класса). Если даже после автоматической генерации кода возникает та же ошибка — проверьте код, возможно у Вас используется конструкция {$IFDEF…}{$ELSE}{$ENDIF} и код попал в неиспользуемую секцию.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Menus;
 
 
type
  TForm1 = class(TForm)
    mm1: TMainMenu;
    edt1: TEdit;
    edt2: TEdit;
    rb1: TRadioButton;
    rb2: TRadioButton;
    rb3: TRadioButton;
    rb4: TRadioButton;
    rb5: TRadioButton;
    rb6: TRadioButton;
    rb7: TRadioButton;
    rb8: TRadioButton;
    btn1: TButton;
    btn2: TButton;
    btn3: TButton;
 
    procedure rb1Click(Sender: TObject);
    procedure rb2Click(Sender: TObject);
    procedure rb4Click(Sender: TObject);
    procedure rb3Click(Sender: TObject);
    procedure rb5Click(Sender: TObject);
    procedure rb6Click(Sender: TObject);
    procedure rb8Click(Sender: TObject);
    procedure rb7Click(Sender: TObject);
    procedure btn1Click(Sender: TObject);
    PROCEDURE DEC_to_P(const st:string;p:byte;Sender: TObject);
    FUNCTION  DEC_to_P0(const n:string;p:byte;Sender: TObject):string;
    PROCEDURE P_to_DEC(const n:string;p:byte;Sender: TObject);
    FUNCTION  P0_to_DEC(const n:string;p:byte;Sender: TObject):string;
    PROCEDURE BIN_to_OCT(const n:string;Sender: TObject);
    PROCEDURE BIN_to_HEX(const n:string;Sender: TObject);
    PROCEDURE OCT_to_BIN(const n:string;Sender: TObject);
    PROCEDURE HEX_to_BIN(const n:string;Sender: TObject);
    PROCEDURE OCT_to_HEX(const st:string;Sender: TObject);
    PROCEDURE HEX_to_OCT(const st:string;Sender: TObject);
    procedure Edt1KeyPress(Sender: TObject; var Key: Char);
    procedure btn2Click(Sender: TObject);
    procedure btn3Click(Sender: TObject);
 
 
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
  const
cod:array[0..15]of char=
 ('0','1','2','3','4','5','6','7','8','9','A','B','C','D',
  'E','F');
cod2:array[0..7]of string[3]=
 ('000','001','010','011','100','101','110','111');
cod3:array[0..15]of string[4]=
 ('0000','0001','0010','0011','0100','0101','0110','0111',
  '1000','1001','1010','1011','1100','1101','1110','1111');
 
  var
  Form1: TForm1;
    i:integer;
  tmp4:string;
  flag_clear:boolean;
 
 
implementation
 
{$R *.dfm}
 
 
FUNCTION IsFloatBIN(ch:char; st:string):char;
BEGIN
IsFloatBIN:=chr(0);
if (ch>='0')and(ch<='1')
  or(ch=#13)or(ch=#8) then IsFloatBIN:=ch;
 
case ch of
',': if (Pos(',',st) = 0)and(st[Length(st)]>='0') then IsFloatBIN:=ch;
end;
END;
 
FUNCTION IsFloatOCT(ch:char; st:string):char;
BEGIN
IsFloatOCT:=chr(0);
if (ch>='0')and(ch<='7')
  or(ch=#13)or(ch=#8) then IsFloatOCT:=ch;
 
case ch of
',': if (Pos(',',st) = 0)and(st[Length(st)]>='0') then IsFloatOCT:=ch;
end;
END;
 
FUNCTION IsFloatDEC(ch:char; st:string):char;
BEGIN
IsFloatDEC:=chr(0);
if (ch>='0')and(ch<='9')// Списала код Cyberforum!
  or(ch=#13)or(ch=#8) then IsFloatDEC:=ch;
 
case ch of
',': if (Pos(',',st) = 0)and(st[Length(st)]>='0') then IsFloatDEC:=ch;
end;
END;
 
FUNCTION IsFloatHEX(ch:char; st:string):char;
BEGIN
IsFloatHEX:=chr(0);
case ch of
'Ф','ф': ch:='A';
'И','и': ch:='B';
'С','с': ch:='C';
'В','в': ch:='D';
'У','у': ch:='E';
'А','а': ch:='F';
end;
if (ch>='0')and(ch<='9')
  or(upcase(ch)>='A')and(upcase(ch)<='F')
  or(ch=#13)or(ch=#8) then IsFloatHEX:=upcase(ch);
 
case ch of
',': if (Pos(',',st) = 0)and(st[Length(st)]>='0')then IsFloatHEX:=ch;
end;
END;
 
procedure TForm1.edt1KeyPress(Sender: TObject; var Key: Char);
begin
edt2.Text:='';
if key=#13 then
 begin
  btn1.SetFocus;
  exit;
 end;
if rb1.Checked then key:=IsFloatBIN(key,edt1.Text) else
if rb2.Checked then key:=IsFloatOCT(key,edt1.Text) else
if rb3.Checked then key:=IsFloatDEC(key,edt1.Text) else
if rb4.Checked then key:=IsFloatHEX(key,edt1.Text);
end;
 
procedure TForm1.rb1Click(Sender: TObject);
begin
rb5.Enabled:=false;
rb6.Enabled:=true;
rb7.Enabled:=true;
rb8.Enabled:=true;
if rb5.Checked then rb6.Checked:=true;
edt1.Text:='0';
edt1.SetFocus;
edt2.Text:='';
end;
 
procedure TForm1.rb2Click(Sender: TObject);
begin
rb5.Enabled:=true;
rb6.Enabled:=false;
rb7.Enabled:=true;
rb8.Enabled:=true;
if rb6.Checked then rb5.Checked:=true;
edt1.Text:='0';
edt1.SetFocus;
edt2.Text:='';
end;
 
procedure TForm1.rb4Click(Sender: TObject);
begin
rb5.Enabled:=true;
rb6.Enabled:=true;
rb7.Enabled:=true;
rb8.Enabled:=false;
if rb8.Checked then rb7.Checked:=true;
edt1.Text:='0';
edt1.SetFocus;
edt2.Text:='';
end;
 
procedure TForm1.rb3Click(Sender: TObject);
begin
rb5.Enabled:=true;
rb6.Enabled:=true;
rb7.Enabled:=false;
rb8.Enabled:=true;
if rb7.Checked then rb6.Checked:=true;
edt1.Text:='0';
edt1.SetFocus;
edt2.Text:='';
end;
 
procedure TForm1.rb5Click(Sender: TObject);
begin
edt1.SetFocus;
edt2.Text:='';
end;
 
procedure TForm1.rb6Click(Sender: TObject);
begin
edt1.SetFocus;
edt2.Text:='';
end;
 
procedure TForm1.rb8Click(Sender: TObject);
begin
edt1.SetFocus;
edt2.Text:='';
end;
 
procedure TForm1.rb7Click(Sender: TObject);
begin
edt1.SetFocus;
edt2.Text:='';
end;
 
PROCEDURE TForm1.DEC_to_P(const st:string;p:byte;Sender: TObject);
var
ost,tmp,tmp2,b:string;
d:longint;
e,c:integer;
BEGIN
if pos(',',st)=0 then
 begin
  d:=strtoint(st);
  ost:='';
 end else
 begin
  d:=strtoint(copy(st,1,pos(',',st)-1));
  ost:=copy(st,pos(',',st)+1,length(st)-pos(',',st));
 end;
 
 
end;
 
procedure TForm1.btn2Click(Sender: TObject);
begin
edt1.Clear;
edt2.Clear;
end;
 
procedure TForm1.btn3Click(Sender: TObject);
begin
Form1.Close;
end;
 
end.

Типов сообщений компилятора — более двухсот. Рассмотрим перечень наиболее встречающихся сообщений класса Error

0.<Что-то1> expected but <Что-то2> found. Обычно это сообщение возникает при синтаксической ошибке.Например,в случае небаланса скобок,компилятор сообщит: ‘)’ expected but ‘;’ found (вместо ожидавшейся скобки найдена запятая).
Компилятор часто сообщает, что ‘end’ ожидается,например:x:= 5,7; здесь неуместен разделитель-запятая, а сообщается про end. (‘END’ expected but ‘,’ found)

1. <Имя> is not a type identifier. Данное <Имя> не является именем типа.

2. ‘;’ not allowed before ‘Else’. Перед else нельзя ставить точку с запятой

3. Abstract method must be virtual or dynamic. Абстрактный метод должен быть виртуальным или динамическим.

4. Ambiguous overloaded call to <Имя блока>. Компилятор не может однозначно выбрать перегружаемый блок. Измените параметр.

5. Array type required. Ошибка возникает в случаях, когда в индексе элемента массива указано больше уровней, чем предусмотрено описанием, и если массив не описан. Например, после объявления двумерного массива х или простой переменной х ошибочно записывают элемент х[2,1,1] (в нем показано три измерения).

6. Assignment to FOR-loop variable <Имя>. Присваивание значения параметру FOR-цикла в теле цикла.
Например, вследствие описки дважды используется имя i в кратном цикле:
For i:= 1 to n do For i:= 1 to m do …

7. Break or Continue outside of loop. Break или Continue — не в цикле.

8. Cannot initialize local variables. Локальные переменные запрещено инициализировать (задавать им значения при описании).

9. Cannot assign to/read a read-only/write-only property. Присвоение значения свойству read/only и чтение свойства write/only запрещены.

10. Constant expression expected.В этом месте должна стоять константа или константное выражение, например константа выбора в структуре Case.

11. Constant expression violates subrange bounds. Выход значения константы из диапазона. Контроль не полон. Например, «сойдет с рук» присваивание x:=3000000000, где х имеет тип integer, но начение х будет искажено.

12. Constant or type identifier expected. Требуется имя типа или тип-диапазон.

13. Could not compile used unit <Имя>. Компиляция присоединенного модуля <Имя> невозможна.

14. Data type too large. Тип определяет структуру размером более 2 Гбайт; это слишком много.

15. Declaration expected but <Что-то> found. Пропущено описание или оператор.

16. Declaration of <Имя> differs from previous declarations… Данный заголовок блока не соответствует упреждающему объявлению блока.

17. Default parameter <Имя> must be by-value or constant. Необязательный параметр (со значением по умолчанию) не должен вызываться по ссылке.

18. Expression expected. В этом месте программы должно стоять выражение.

19. Expression too complicated. Выражение излишне сложно для компиляции.

20. File type not allowed here. В этом месте или в этой роли файловую переменную нельзя использовать.
Например, она не может быть формальным параметром-значением.

21. For loop control variable must be simple local variable. Параметр цикла должен быть простой локальной (описанной в этом же блоке) переменной.

22. For loop control variable must have ordinal type. Параметр цикла должен иметь порядковый тип.Вещественный тип запрещен.

23. Function needs result type. В заголовке функции надо указывать тип ее результата.

24. Identifier expected but <Что-то> found. В этом месте должно стоять имя. Например, пропущено имя
функции после Function.

25. Identifier redeclared <Имя>.<Имя> описано повторно, но в пределах блока имя можно описать лишь раз. Проверьте, не обозначена ли локальная переменная тем же именем, что и формальный параметр блока.

26. Illegal character in input file <знак>. Запретный знак, например «русская» буква, либо вы оставили скобку }, убрав открывающую скобку {.

27. Illegal type in Read/Readln (Write/Writeln) statement. Элемент запрещенного типа в списке ввода/вывода.

28. Incompatible types <указание типов>. Несоответствие типов по присваиванию или типов операндов одной операции. Сообщение выдается и при неверном использовании структур. Например, z — запись, ошибочно записано
присваивание z:= 0 (работать надо с полями записи).

29. Invalid function result type. Недопустимый тип результата функции.

30. Label already defined: <Метка>. <Метка> уже помечает другой оператор.

31. Left side cannot be assigned to. He может быть такой левой части в присваивании. Примеры: попытка присвоить значение файловой переменной, присвоение значения формальному параметру-константе.

32. Line too long. В строке программного текста больше 255 знаков.

33. Low bound exceeds high bound. Нижняя граница превышает верхнюю.

34. Missing operator or semicolon.Пропуск операции (например перед скобкой) или пропуск точки с запятой. При пропуске ‘;’ маркер ошибки стоит на очередном предложении (объявлении или операторе).

35. Missing parameter type. He указан тип формального параметра-значения или параметра процедурного типа.

36. Not enough actual parameters. He хватает фактических параметров.

37. Need to specify at least one dimension … Нужно задавать в операторе SetLength хотя бы один размер динамического массива.

38. Number of elements differs from declaration. Число элементов в структурной константе не соответствует ее описанию.

39. Operator not applicable to this operand type. Операция не применима к операндам данного типа. Например: ‘А’ or ‘В’; ‘Text1’* ‘Text2’.

40. Order of fields in record constant differs from declaration. Порядок полей в записи-константе не соответствует описанию записи.

41. Ordinal type required. Требуется порядковый тип (например, в индексе).

42. Out of memory. Компилятору не хватает памяти.

43. Statement expected but <Что-то> found. В этом месте должен стоять оператор. Сообщение выдается во всех случаях, когда в тело блока или секцию инициализации ошибочно помещают описание (<Что-то>). Ошибочная форма обращения к процедуре Procedure <Имя> или к функции Function <Имя> также вызывает сообщение.

44. Sets may have at most 256 elements. Множество (тип Set) не может содержать более 256 элементов.

45. Slice standard function only allowed as open array argument. Функцию Slice можно использовать лишь как фактический параметр

46. Statement not allowed in interface part. Предложения в секции интерфейса программного модуля недопустимы.

47. Syntax error in real number. Синтаксическая ошибка в записи числа вещственного типа.

48. There is no overload version of <Имя> that can be called with these arguments.Не предусмотрен перегружаемый блок <Имя>, который мог бы вызываться с таким аргументом. Пример: IntToStr(x), где х – выражение вещественного типа.

49. Too many actual parameters. Фактических параметров больше, чем формальных.

50. Type actual and formal var parameters must be identical. Тип фактического параметра должен быть идентичен типу
формального параметра-переменной.

51. Type of expression must be <Тип>. Выражение должно быть указанного типа. Например,после While и Until должно стоять логическое выражение.

52. Undeclared identifier: <Имя>.Не описано <Имя>. Проверьте есть ли описание в нужном месте,нет ли описок в имени. Если указано имя компонента формы, проверьте,поместили ли компонент на данную форму.

53. Unexpected end of file in comment started on line <N>. Неожиданный конец файла
при незавершенном комментарии, начало комментария — в строке N.

54. Unit name mismatch: <Имя>. Имя модуля ошибочно.

55. Unsatisfied forward or external declaration <Имя>. Отсутствует описание блока, объявление которого было дано (заголовок в интерфейсе или в описании объектного типа, либо упреждающее описание).

56. Unterminate string. He закрыта апострофом строка-константа типа string.

Рассмотрим также некоторые сообщения классов warning и hint.

Сосредотачивайтесь на первом сообщении компилятора. Исправление хотя бы одной ошибки и повторная компиляция может значительно уменьшить число сообщений об ошибках,поэтому не упорствуйте, стремясь понять сразу причину каждого сообщения.

Не удаляйте прежний вариант кода,пока не убедитесь,что ошибка устранена. Лучше на время закомментировать код,заключив его в скобки: { код }

Компилятор не анализирует, как будет выполняться программа, поэтому выход значения индекса из диапазона выявляет только если индекс задан константным выражением. Деление на ноль вообще пропускается, кроме оператора div, в случае если делитель — константное выражение.

 
Чайник ©
 
(2007-04-06 03:38)
[0]

Что за глюк (у меня или у Дельфи)?:

Есть юнит, в секции interface объявляю:

unit P1202_Scan;

interface

uses
 Windows, SysUtils, Classes;

// Function of AD/DA
function  P1202_AdsPolling(fAdVal: PSingle; wNum: Word): Word; stdCall;

в секции implementation соответсвенно:

function  P1202_AdsPolling(fAdVal: PSingle; wNum: Word): Word; stdCall;
begin
...
end;

При попытке компиляции выдает:
 [Error] P1202_Scan.pas(70): Previous declaration of «P1202_AdsPolling» was not marked with the «overload» directive
 [Error] P1202_Scan.pas(16): Unsatisfied forward or external declaration: «P1202_AdsPolling»
 [Fatal Error] P1202_Im.dpr(14): Could not compile used unit «P1202_Scan.pas»

Что это?


 
Чайник ©
 
(2007-04-06 03:43)
[1]

Опечатка: в implementation декларации stdCall нет:

function  P1202_AdsPolling(fAdVal: PSingle; wNum: Word): Word;
begin

end;


 
Чайник ©
 
(2007-04-06 03:47)
[2]

Ну нет уменя никакой «Previous declaration» и не собираюсь я никого «overload» ! Такое впечатление, что компилятор названия функций в interface и interface воспринимает, как разные и не сопоставляет. Что за глюк?!


 
Думкин ©
 
(2007-04-06 07:06)
[3]

Раз говорит, значит есть основания. У меня этот код с теми же названиями откомпилился на ура.


 
Думкин ©
 
(2007-04-06 07:14)
[4]

по написаному вами тут выходит, что ошибка должна вылазить в 9-й строке, а у вас указывается 16.

Следовательно. как и всегда — ошибка в 17-й строке.


 
_Аноним
 
(2007-04-06 23:13)
[5]

Ну вариантов быть не может — проверь, в 17 строке у тебя объявлена еще одна P1202_AdsPolling


 
Leonid Troyanovsky ©
 
(2007-04-07 00:31)
[6]


> Чайник ©   (06.04.07 03:38)  

> // Function of AD/DA
> function  P1202_AdsPolling(fAdVal: PSingle; wNum: Word):
>  Word; stdCall;


function  P1202_AdsPolling(fAdVal: PSingle; wNum: Word): Word; forward;


Regards, LVT.


 
Германн ©
 
(2007-04-07 01:33)
[7]


> Чайник ©   (06.04.07 03:38)
>
> Что за глюк (у меня или у Дельфи)?:
>
> Есть юнит, в секции interface объявляю:
>
> unit P1202_Scan;
>
> interface
>
> uses
>  Windows, SysUtils, Classes;
>
> // Function of AD/DA
> function  P1202_AdsPolling(fAdVal: PSingle; wNum: Word):
>  Word; stdCall;
>
> в секции implementation соответсвенно:
>
> function  P1202_AdsPolling(fAdVal: PSingle; wNum: Word):
>  Word; stdCall;
> begin
> …
> end;
>
> При попытке компиляции выдает:
>  [Error] P1202_Scan.pas(70): Previous declaration of «P1202_AdsPolling»
> was not marked with the «overload» directive
>  [Error] P1202_Scan.pas(16): Unsatisfied forward or external
> declaration: «P1202_AdsPolling»
>  [Fatal Error] P1202_Im.dpr(14): Could not compile used
> unit «P1202_Scan.pas»
>
> Что это?
>

Имхо, ты в своём коде где-то «переопределил», скорее всего, тип PString. Ну или Word.


 
Германн ©
 
(2007-04-07 01:35)
[8]


> Чайник ©   (06.04.07 03:47) [2]
>
> Ну нет уменя никакой «Previous declaration»

«Previous declaration» в данном случае это объявление функции в секции interface.


 
Belorus ©
 
(2007-04-07 11:08)
[9]

Ошибка в 16 строке, это почти то же самое что и в 17… Подозрительный код..


 
DrPass ©
 
(2007-04-07 21:51)
[10]


> Опечатка: в implementation декларации stdCall нет:
>
> function  P1202_AdsPolling(fAdVal: PSingle; wNum: Word):
>  Word;
> begin
>
> end;

Ну так что ж ты хочешь, дорогой?


 
Германн ©
 
(2007-04-08 00:47)
[11]


> DrPass ©   (07.04.07 21:51) [10]


> Ну так что ж ты хочешь, дорогой?
>

Ошибка с этим не связана.


 
Плохиш ©
 
(2007-04-08 01:14)
[12]


> Чайник ©   (06.04.07 03:38)  
> Что за глюк (у меня или у Дельфи)?:

Глюк у тебя. Тут без вариантов.

PS. Неужели так трудно поиск по своему коду сделать?


 
DrPass ©
 
(2007-04-08 10:18)
[13]


> Германн ©   (08.04.07 00:47) [11]

Это понятно 🙂
Скорее всего, он где-то по коду переопределяет тип параметров, psingle или word.
Хотя в очень редких случаях и у Delphi бывают глюки


 
_Аноним
 
(2007-04-08 12:23)
[14]


> DrPass ©  

Нет, если бы он переопределял тип psingle или word, то текст ошибки компилера был бы другой
а у него

[Error] P1202_Scan.pas(70): Previous declaration of «P1202_AdsPolling» was not marked with the «overload» directive
[Error] P1202_Scan.pas(16): Unsatisfied forward or external declaration: «P1202_AdsPolling»

однозначно еще есть строка в коде с объявлением P1202_AdsPolling


 
Германн ©
 
(2007-04-08 13:01)
[15]


> Аноним   (08.04.07 12:23) [14]
>
> Нет, если бы он переопределял тип psingle или word, то текст
> ошибки компилера был бы другой
> а у него

А ты сам то проверь. Именно такой текст ошибки и есть при переопределении. Слово в слово.


 
Чайник ©
 
(2007-04-08 13:16)
[16]

Всем спасибо! Каюсь — это полностью мой идиотизм. Действительно, было еще одно объявление AdsPolling — в 16 строке на 200 позизии — т.е. далеко вправо за пределами экрана. Вот пример всем мальчикам и девочкам бездумного использования Copy/Paste.


 
Anatoly Podgoretsky ©
 
(2007-04-08 13:23)
[17]

> Чайник  (08.04.2007 13:16:16)  [16]

А Ctrl+F пользоваться не умеешь


Типов сообщений компилятора — более двухсот. Рассмотрим перечень наиболее встречающихся сообщений класса Error

  • 0. <Что-то1> expected but <Что-то2> found. Обычно это сообщение возникает при синтаксической ошибке.Например,в случае небаланса скобок,компилятор сообщит: ‘)’ expected but ‘;’ found (вместо ожидавшейся скобки найдена запятая).

    Компилятор часто сообщает, что ‘end’ ожидается,например:x:= 5,7; здесь неуместен разделитель-запятая, а сообщается про end. (‘END’ expected but ‘,’ found)

  • 1. <Имя> is not a type identifier. Данное <Имя> не является именем типа.
  • 2. ‘;’ not allowed before ‘Else’. Перед else нельзя ставить точку с запятой
  • 3. Abstract method must be virtual or dynamic. Абстрактный метод должен быть виртуальным или динамическим.
  • 4. Ambiguous overloaded call to <Имя блока>. Компилятор не может однозначно выбрать перегружаемый блок. Измените параметр.
  • 5. Array type required. Ошибка возникает в случаях, когда в индексе элемента массива указано больше уровней, чем предусмотрено описанием, и если массив не описан. Например, после объявления двумерного массива х или простой переменной х ошибочно записывают элемент х[2,1,1] (в нем показано три измерения).
  • 6. Assignment to FOR-loop variable <Имя>. Присваивание значения параметру FOR-цикла в теле цикла.

    Например, вследствие описки дважды используется имя i в кратном цикле:

    For i:= 1 to n do For i:= 1 to m do ...
    
  • 7. Break or Continue outside of loop. Break или Continue — не в цикле.
  • 8. Cannot initialize local variables. Локальные переменные запрещено инициализировать (задавать им значения при описании).
  • 9. Cannot assign to/read a read-only/write-only property. Присвоение значения свойству read/only и чтение свойства write/only запрещены.
  • 10. Constant expression expected.В этом месте должна стоять константа или константное выражение, например константа выбора в структуре Case.
  • 11. Constant expression violates subrange bounds. Выход значения константы из диапазона. Контроль не полон. Например, «сойдет с рук» присваивание x:=3000000000, где х имеет тип integer, но начение х будет искажено.
  • 12. Constant or type identifier expected. Требуется имя типа или тип-диапазон.
  • 13. Could not compile used unit <Имя>. Компиляция присоединенного модуля <Имя> невозможна.
  • 14. Data type too large. Тип определяет структуру размером более 2 Гбайт; это слишком много.
  • 15. Declaration expected but <Что-то> found. Пропущено описание или оператор.
  • 16. Declaration of <Имя> differs from previous declarations… Данный заголовок блока не соответствует упреждающему объявлению блока.
  • 17. Default parameter <Имя> must be by-value or constant. Необязательный параметр (со значением по умолчанию) не должен вызываться по ссылке.
  • 18. Expression expected. В этом месте программы должно стоять выражение.
  • 19. Expression too complicated. Выражение излишне сложно для компиляции.
  • 20. File type not allowed here. В этом месте или в этой роли файловую переменную нельзя использовать. Например, она не может быть формальным параметром-значением.
  • 21. For loop control variable must be simple local variable. Параметр цикла должен быть простой локальной (описанной в этом же блоке) переменной.
  • 22. For loop control variable must have ordinal type. Параметр цикла должен иметь порядковый тип.Вещественный тип запрещен.
  • 23. Function needs result type. В заголовке функции надо указывать тип ее результата.
  • 24. Identifier expected but <Что-то> found. В этом месте должно стоять имя. Например, пропущено имя функции после Function.
  • 25. Identifier redeclared <Имя>.<Имя> описано повторно, но в пределах блока имя можно описать лишь раз. Проверьте, не обозначена ли локальная переменная тем же именем, что и формальный параметр блока.
  • 26. Illegal character in input file <знак>. Запретный знак, например «русская» буква, либо вы оставили скобку }, убрав открывающую скобку {.
  • 27. Illegal type in Read/Readln (Write/Writeln) statement. Элемент запрещенного типа в списке ввода/вывода.
  • 28. Incompatible types <указание типов>. Несоответствие типов по присваиванию или типов операндов одной операции. Сообщение выдается и при неверном использовании структур. Например, z — запись, ошибочно записано присваивание z:= 0 (работать надо с полями записи).
  • 29. Invalid function result type. Недопустимый тип результата функции.
  • 30. Label already defined: <Метка>. <Метка> уже помечает другой оператор.
  • 31. Left side cannot be assigned to. He может быть такой левой части в присваивании. Примеры: попытка присвоить значение файловой переменной, присвоение значения формальному параметру-константе.
  • 32. Line too long. В строке программного текста больше 255 знаков.
  • 33. Low bound exceeds high bound. Нижняя граница превышает верхнюю.
  • 34. Missing operator or semicolon.Пропуск операции (например перед скобкой) или пропуск точки с запятой. При пропуске ‘;’ маркер ошибки стоит на очередном предложении (объявлении или операторе).
  • 35. Missing parameter type. He указан тип формального параметра-значения или параметра процедурного типа.
  • 36. Not enough actual parameters. He хватает фактических параметров.
  • 37. Need to specify at least one dimension … Нужно задавать в операторе SetLength хотя бы один размер динамического массива.
  • 38. Number of elements differs from declaration. Число элементов в структурной константе не соответствует ее описанию.
  • 39. Operator not applicable to this operand type. Операция не применима к операндам данного типа. Например: ‘А’ or ‘В’; ‘Text1’* ‘Text2’.
  • 40. Order of fields in record constant differs from declaration. Порядок полей в записи-константе не соответствует описанию записи.
  • 41. Ordinal type required. Требуется порядковый тип (например, в индексе).
  • 42. Out of memory. Компилятору не хватает памяти.
  • 43. Statement expected but <Что-то> found. В этом месте должен стоять оператор. Сообщение выдается во всех случаях, когда в тело блока или секцию инициализации ошибочно помещают описание (<Что-то>). Ошибочная форма обращения к процедуре Procedure <Имя> или к функции Function <Имя> также вызывает сообщение.
  • 44. Sets may have at most 256 elements. Множество (тип Set) не может содержать более 256 элементов.
  • 45. Slice standard function only allowed as open array argument. Функцию Slice можно использовать лишь как фактический параметр
  • 46. Statement not allowed in interface part. Предложения в секции интерфейса программного модуля недопустимы.
  • 47. Syntax error in real number. Синтаксическая ошибка в записи числа вещственного типа.
  • 48. There is no overload version of <Имя> that can be called with these arguments.Не предусмотрен перегружаемый блок <Имя>, который мог бы вызываться с таким аргументом. Пример: IntToStr(x), где х – выражение вещественного типа.
  • 49. Too many actual parameters. Фактических параметров больше, чем формальных.
  • 50. Type actual and formal var parameters must be identical. Тип фактического параметра должен быть идентичен типу формального параметра-переменной.
  • 51. Type of expression must be <Тип>. Выражение должно быть указанного типа. Например,после While и Until должно стоять логическое выражение.
  • 52. Undeclared identifier: <Имя>.Не описано <Имя>. Проверьте есть ли описание в нужном месте,нет ли описок в имени. Если указано имя компонента формы, проверьте,поместили ли компонент на данную форму.
  • 53. Unexpected end of file in comment started on line <N>. Неожиданный конец файла при незавершенном комментарии, начало комментария — в строке N.
  • 54. Unit name mismatch: <Имя>. Имя модуля ошибочно.
  • 55. Unsatisfied forward or external declaration <Имя>. Отсутствует описание блока, объявление которого было дано (заголовок в интерфейсе или в описании объектного типа, либо упреждающее описание).
  • 56. Unterminate string. He закрыта апострофом строка-константа типа string.

Рассмотрим также некоторые сообщения классов warning и hint.

  • Return value of function <Имя> might be undefined. В теле функции нет присваивания ее результата.
  • Variable <Имя> might not have been initialized. Указывает имя переменой, которой не задали значения.
  • For-Loop variable <Имя> may be undefined after loop. Попытка использования значения параметра For-цикла после завершения этого цикла.
  • Text after final ‘END.’ ignored by compiler. Текст, идущий за конечной строкой модуля, игнорируется компилятором.
  • Variable <Имя> is declared but never used in <Имя блока>. Обращает внимание на переменную <Имя>, описанную,но не нашедшую применения.
  • Value assigned to <Имя> never used. Хотя бы одно значение переменной <Имя> никак не использовано.

Несколько рекомендаций

Сосредотачивайтесь на первом сообщении компилятора. Исправление хотя бы одной ошибки и повторная компиляция может значительно уменьшить число сообщений об ошибках,поэтому не упорствуйте, стремясь понять сразу причину каждого сообщения.

Не удаляйте прежний вариант кода,пока не убедитесь,что ошибка устранена. Лучше на время закомментировать код,заключив его в скобки: { код }

Компилятор не анализирует, как будет выполняться программа, поэтому выход значения индекса из диапазона выявляет только если индекс задан константным выражением. Деление на ноль вообще пропускается, кроме оператора div, в случае если делитель — константное выражение.

    msm.ru

    Нравится ресурс?

    Помоги проекту!

    Пожалуйста, выделяйте текст программы тегом [сode=pas] … [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.


    Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
    1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
    2. Как «свернуть» программу в трей.
    3. Как «скрыться» от Ctrl + Alt + Del (заблокировать их и т.п.)
    4. Как прочитать список файлов, поддиректорий в директории?
    5. Как запустить программу/файл?
    … (продолжение следует) …


    Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
    Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


    Внимание
    Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
    Повторная попытка — 60 дней. Последующие попытки бан.
    Мат в разделе — бан на три месяца…

    >
    помогите откомпилировать

    • Подписаться на тему
    • Сообщить другу
    • Скачать/распечатать тему

      


    Сообщ.
    #1

    ,
    11.08.13, 09:35

      Senior Member

      ****

      Рейтинг (т): 2

      в общем купил вот эту вещь,
      http://usbuirt.com/overview.htm

      на форуме один товарищ предложил свой готовый вариант подключения библиотеки для работы с утстройством
      http://65.36.202.170/phpBB2/viewtopic.php?…7f24459cb3dd29b

      я попробывал откомпилировать но получаю ошибку. я на столько глубоко не знаком с Delphi . прошу подправить ошибку. для вас это дело на 20 секунд а я ничего понять не могу((( в чем загвоздка..
      спасибо, надеюсь на понимание и помощь.
      исходники прикрепил

      Прикреплённый файлПрикреплённый файлUSB_UIRT.rar (102,32 Кбайт, скачиваний: 70)


      antonn



      Сообщ.
      #2

      ,
      11.08.13, 11:07


        Emmys



        Сообщ.
        #3

        ,
        12.08.13, 06:25

          Senior Member

          ****

          Рейтинг (т): 2

          ExpandedWrap disabled

            Checking project dependencies…

            Compiling USBUIRT.dproj (Debug configuration)

            [DCC Hint] UIRT.pas(60): H2219 Private symbol ‘FUIRTCommThread’ declared but never used

            [DCC Error] UIRT.pas(75): E2065 Unsatisfied forward or external declaration: ‘TUIRTCommThread.Create’

            [DCC Error] UIRT.pas(76): E2065 Unsatisfied forward or external declaration: ‘TUIRTCommThread.Execute’

            [DCC Fatal Error] Unit1.pas(7): F2063 Could not compile used unit ‘UIRT.pas’

            Failed

            Elapsed time: 00:00:00.1

          + скриншот

          Прикреплённый файлПрикреплённый файл22222222.JPG (78,89 Кбайт, скачиваний: 533)


          leo



          Сообщ.
          #4

          ,
          12.08.13, 13:57

            Цитата Emmys @ 12.08.13, 06:25

            [DCC Hint] UIRT.pas(60): H2219 Private symbol ‘FUIRTCommThread’ declared but never used

            Раз FUIRTCommThread:TUIRTCommThread нигде не используется, то просто удали или закомментируй объявление класса TUIRTCommThread и все строчки, где этот класс упоминается


            Emmys

              


            Сообщ.
            #5

            ,
            13.08.13, 18:18

              Senior Member

              ****

              Рейтинг (т): 2

              по рисунку видно что это не основная ошибка а просто подсказка


              northener



              Сообщ.
              #6

              ,
              13.08.13, 19:32

                Цитата Emmys @ 13.08.13, 18:18

                по рисунку видно что это не основная ошибка а просто подсказка

                Читай ответ leo полностью:

                Цитата leo @ 12.08.13, 13:57

                и все строчки, где этот класс упоминается

                Т.е.
                [DCC Error] UIRT.pas(75): E2065 Unsatisfied forward or external declaration: ‘TUIRTCommThread.Create’
                [DCC Error] UIRT.pas(76): E2065 Unsatisfied forward or external declaration: ‘TUIRTCommThread.Execute’

                P.S.
                Хотя конечно их не удалять надо, а реализовывать. Но хотя бы что-то скомпилируется.


                leo



                Сообщ.
                #7

                ,
                13.08.13, 21:03

                  Цитата Emmys @ 13.08.13, 18:18

                  по рисунку видно что это не основная ошибка а просто подсказка

                  Это «корень зла» всех остальных ошибок

                  Цитата northener @ 13.08.13, 19:32

                  Хотя конечно их не удалять надо, а реализовывать

                  А зачем их реализовывать (и как), если в исходном коде этот поток не используется (строка создания потока закомментирована)? И вообще, судя по количеству закомментированных строк, это не релизный код, а черновик творческих исканий автора кода :)


                  Emmys



                  Сообщ.
                  #8

                  ,
                  14.08.13, 10:41

                    Senior Member

                    ****

                    Рейтинг (т): 2

                    удалил.. я вас понял..
                    чувствую я намучаюсь еще… надо будет каким то образом прослушивать ик сигнал. — я так понял этот момент он не реализовал?…

                    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

                    0 пользователей:

                    • Предыдущая тема
                    • Delphi: Общие вопросы
                    • Следующая тема

                    Рейтинг@Mail.ru

                    [ Script execution time: 0,1016 ]   [ 20 queries used ]   [ Generated: 28.01.23, 18:02 GMT ]  

                    0 0 голоса
                    Рейтинг статьи
                    Подписаться
                    Уведомить о
                    guest

                    0 комментариев
                    Старые
                    Новые Популярные
                    Межтекстовые Отзывы
                    Посмотреть все комментарии

                    А вот еще интересные материалы:

                  • Яшка сломя голову остановился исправьте ошибки
                  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
                  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
                  • Delphi ошибка 1400 недопустимый дескриптор окна
                  • Delphi как убрать сообщение об ошибке