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
10.9k11 gold badges74 silver badges124 bronze badges
asked Aug 19, 2009 at 16:36
You have declared this method but didn’t implement it.
answered Aug 19, 2009 at 16:49
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
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
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, в случае если делитель — константное выражение.
|
|
|
|
Пожалуйста, выделяйте текст программы тегом [сode=pas] … [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как «свернуть» программу в трей.
3. Как «скрыться» от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
… (продолжение следует) …
Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.
Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка — 60 дней. Последующие попытки бан.
Мат в разделе — бан на три месяца…

помогите откомпилировать
- Подписаться на тему
- Сообщить другу
- Скачать/распечатать тему
|
|
|
|
Senior Member
Рейтинг (т): 2 |
в общем купил вот эту вещь, на форуме один товарищ предложил свой готовый вариант подключения библиотеки для работы с утстройством я попробывал откомпилировать но получаю ошибку. я на столько глубоко не знаком с Delphi . прошу подправить ошибку. для вас это дело на 20 секунд а я ничего понять не могу((( в чем загвоздка.. |
|
antonn |
|
|
Emmys |
|
|
Senior Member
Рейтинг (т): 2 |
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 + скриншот |
|
leo |
|
|
Цитата Emmys @ 12.08.13, 06:25 [DCC Hint] UIRT.pas(60): H2219 Private symbol ‘FUIRTCommThread’ declared but never used Раз FUIRTCommThread:TUIRTCommThread нигде не используется, то просто удали или закомментируй объявление класса TUIRTCommThread и все строчки, где этот класс упоминается |
|
Emmys |
|
|
Senior Member
Рейтинг (т): 2 |
по рисунку видно что это не основная ошибка а просто подсказка |
|
northener |
|
|
Цитата Emmys @ 13.08.13, 18:18 по рисунку видно что это не основная ошибка а просто подсказка Читай ответ leo полностью: Цитата leo @ 12.08.13, 13:57 и все строчки, где этот класс упоминается
Т.е. P.S. |
|
leo |
|
|
Цитата Emmys @ 13.08.13, 18:18 по рисунку видно что это не основная ошибка а просто подсказка Это «корень зла» всех остальных ошибок Цитата northener @ 13.08.13, 19:32 Хотя конечно их не удалять надо, а реализовывать
А зачем их реализовывать (и как), если в исходном коде этот поток не используется (строка создания потока закомментирована)? И вообще, судя по количеству закомментированных строк, это не релизный код, а черновик творческих исканий автора кода |
|
Emmys |
|
|
Senior Member
Рейтинг (т): 2 |
удалил.. я вас понял.. |
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:
- Предыдущая тема
- Delphi: Общие вопросы
- Следующая тема
[ Script execution time: 0,1016 ] [ 20 queries used ] [ Generated: 28.01.23, 18:02 GMT ]

USB_UIRT.rar (102,32 Кбайт, скачиваний: 70)

22222222.JPG (78,89 Кбайт, скачиваний: 533)