9 / 9 / 7
Регистрация: 25.10.2015
Сообщений: 47
1
29.10.2015, 17:37. Показов 12216. Ответов 1
Добрый день.
Есть такая программа:
Delphi | ||
|
Это только вторая форма. При нажатии на вторую кнопку должна запускаться функция fcode. Все процедуры работают, функция выдает ошибку. Что не так?
Добавлено через 1 минуту
Вот сообщение об ошибке:unit2.pas(27,14) Error: Forward declaration not solved «TForm2.fcode(AnsiString,AnsiString):AnsiStrin g;»
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Модератор: Модераторы
Ошибка Forward declaration not solved «TForm1.test_proc;»
Здравствуйте все!
У меня странная проблема, не могу объявить процедуру. Вот пример:
- Код: Выделить всё
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs;type
TForm1 = class(TForm)procedure test_proc;
private
{ private declarations }
public
{ public declarations }
end;var
Form1: TForm1;implementation
procedure test_proc;
begin
showmessage('Test!');
end;initialization
{$I unit1.lrs}end.
При компиляции дает ошибку «Forward declaration not solved «TForm1.test_proc;»»
Подскажите пожалуйста, где тут собака зарыта. Версия Lazarus 0.9.28.2
p.s. Удивительно, но подобную ошибку и лекарство от нее я нигде не нашел..(
- zmirk
- незнакомец
- Сообщения: 7
- Зарегистрирован: 17.03.2010 13:18:21
Re: Ошибка Forward declaration not solved «TForm1.test_proc;»
Brainenjii » 27.03.2010 02:17:47
^_^ Должно быть так —
- Код: Выделить всё
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs;type
TForm1 = class(TForm)procedure test_proc;
private
{ private declarations }
public
{ public declarations }
end;var
Form1: TForm1;implementation
procedure TForm1.test_proc;
begin
showmessage('Test!');
end;initialization
{$I unit1.lrs}end.
А ещё лучше
- Код: Выделить всё
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs;type
TForm1 = class(TForm)procedure test_proc;
private
{ private declarations }
public
{ public declarations }
end;var
Form1: TForm1;implementation
{$R *.lfm}
procedure TForm1.test_proc;
begin
showmessage('Test!');
end;end.
-
Brainenjii - энтузиаст
- Сообщения: 1351
- Зарегистрирован: 10.05.2007 00:04:46
Re: Ошибка Forward declaration not solved «TForm1.test_proc;»
zmirk » 27.03.2010 02:48:42
Большое спасибо, заработал первый вариант, второй сыпет ошибку «error while linking».
- zmirk
- незнакомец
- Сообщения: 7
- Зарегистрирован: 17.03.2010 13:18:21
Вернуться в Lazarus
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 21
В этом разделе описаны все сообщения, которые могут случиться при обработке символов, то сеть все, что происходит при обработке имён процедур и переменных.
Сообщение |
Описание |
---|---|
Error: Identifier not found «Сообщение» |
Компилятору неизвестен этот символ. Обычно появляется, когда вы делаете орфографическую ошибку в имени переменной или процедуры, или если вы забыли объявить переменную. |
Fatal: Internal Error in SymTableStack() |
Внутренняя ошибка произошла в компиляторе. Если вы обнаружите такую ошибку, пожалуйста, контактируйте с разработчиками и попытайтесь предоставить точное описание обстоятельств, при которых произошла эта ошибка. |
Error: Duplicate identifier «Сообщение» |
Идентификатор уже был объявлен в текущей области видимости. |
Hint: Identifier already defined in Сообщ1 at line Сообщ2 |
Идентификатор уже был объявлен в предыдущей области видимости. |
Error: Unknown identifier «Сообщение» |
Обнаружен необъявленный идентификатор, или он используется за пределами области видимости, где он был объявлен. |
Error: Forward declaration not solved «Сообщение» |
Это может произойти в двух случаях: •Вы объявили функцию в интерфейсной части, или с директивой forward, но не определили её в исполняемой части. •Вы ссылаетесь на тип, который не объявлен в текущем блоке type. |
Error: Error in type definition |
Это ошибка в определении нового типа массива. Один из разделителей диапазона в массиве объявлен неправильно. Например, Array [1..1.25] вызовет эту ошибку, так как в индексах массивов могут быть только порядковые типы, а 1.25 – это вещественный тип. |
Error: Forward type not resolved «Сообщение» |
Символ был предварительно определён, но его объявление не было найдено. |
Error: Only static variables can be used in static methods or outside methods |
Статический метод объекта может быть доступен только статическим переменным. |
Fatal: record or class type expected |
Переменная или выражение не являются типом record или class. |
Error: Instances of classes or objects with an abstract method are not allowed |
Вы пытаетесь создать экземпляр класса, который имеет не перегружаемые абстрактные методы. |
Warning: Label not defined «Сообщение» |
Метка была объявлена, но не определена. |
Error: Label used but not defined «Сообщение» |
Метка была объявлена и использована, но не определена. |
Error: Illegal label declaration |
Эта ошибка не должна никогда появляться. Это случается, если метка определена вне процедуры или функции. |
Error: GOTO and LABEL are not supported (use switch -Sg) |
Вы должны использовать опцию -Sg для компиляции программы, которая имеет метки и операторы goto. По умолчанию label (метка) и goto не поддерживаются. |
Error: Label not found |
Было обнаружено goto Метка, но метка не была объявлена. |
Error: identifier isn’t a label |
Идентификатор, указанный после goto, не является меткой. |
Error: label already defined |
Вы определили метку дважды. Вы можете определить метку только один раз. |
Error: illegal type declaration of set elements |
Объявление множества содержит неправильное определение типа. |
Error: Forward class definition not resolved «Сообщение» |
Вы объявили класс, но не определили его. |
Hint: Unit «Сообщ1» not used in Сообщ2 |
Модуль, на который есть ссылка в разделе uses, не используется. |
Hint: Parameter «Сообщение» not used |
Идентификатор был объявлен (локально или глобально), но не был использован (локально или глобально). |
Note: Local variable «Сообщение» not used |
Вы объявили, но не использовали переменную в процедуре или функции. |
Hint: Value parameter «Сообщение» is assigned but never used |
Идентификатор был объявлен (локально или глобально) и ему было присвоено значение, но после этого он не используется (локально или глобально). |
Note: Local variable «Сообщение» is assigned but never used |
Переменная в процедуре или функции объявлена и ей присвоено значение, но после этого она не используется. |
Hint: Local Сообщ1 «Сообщ2» is not used |
Локальный идентификатор не используется. |
Note: Private field «Сообщ1.Сообщ2» is never used |
Указанное приватное поле определено, но никогда не используется в коде. |
Note: Private field « Сообщ1.Сообщ2» is assigned but never used |
Указанное приватное поле определено и ему присвоено значение, но оно никогда не читается. |
Note: Private method « Сообщ1.Сообщ2» never used |
Указанный приватный метод определен, но никогда не используется в коде. |
Error: Set type expected |
Переменная или выражение не являются множеством. Это случается при использовании оператора in. |
Warning: Function result does not seem to be set |
Вы можете получить это предупреждение, если компилятор думает, что функция возвращает значение, которое не является множеством. Это не отображается для ассемблерных процедур или процедур, которые содержат ассемблерные блоки. |
Warning: Type «Сообщение» is not aligned correctly in current record for C |
Массивы С, размер которых не кратен 4, будут выровнены для С— структур. |
Error: Unknown record field identifier «Сообщение» |
Поле не существует в определении записи/объекта. |
Warning: Local variable «Сообщение» does not seem to be initialized |
Это сообщение отображается, если компилятор думает, что локальная переменная будет использована (то есть появится в правой части выражения) до того, как она была инициализирована (то есть до того, как она появилась в левой части оператора присваивания). |
Warning: Variable «Сообщение» does not seem to be initialized |
Это сообщение отображается, если компилятор думает, что переменная будет использована (то есть появится в правой части выражения) до того, как она была инициализирована (то есть до того, как она появилась в левой части оператора присваивания). |
Error: identifier idents no member «Сообщение» |
Эта ошибка генерируется, если с идентификатором записи, поля или метода выполняется присваивание, в то время как он не определён. |
Hint: Found declaration: Сообщение |
Вы получите это сообщение, если используете опцию -vh. В случае перегрузки процедуры, которая не была найдена. В сообщении будут перечислены все кандидаты перегружаемых процедур со списком их параметров. |
Error: Data element too large |
Вы получите это сообщение, если вы объявили элемент с данными, размер которых превышает принятый лимит (2 Гб для процессоров 80386+/68020+). |
Error: No matching implementation for interface method «Сообщение» found |
Найден метод, который не соответствует методу интерфейса. Проверьте типы аргументов и тип результата методов. |
Warning: Symbol «Сообщение» is deprecated |
Это означает, что используется идентификатор (переменная, процедура и т.п.), который объявлен deprecated. Идентификаторы deprecated могут уже не быть доступными в новых версиях модуля/библиотеки. Избегайте использовать эти идентификаторы, насколько это возможно. |
Warning: Symbol «Сообщение» is not portable |
Это означает, что используется идентификатор (переменная, процедура и т.п.), который объявлен platform. Значение этого идентификатора зависит от платформы и не должно использоваться, если исходный код должен быть переносимым. |
Warning: Symbol «Сообщение» is not implemented |
Это означает, что используется идентификатор (переменная, процедура и т.п.), который объявлен unimplemented. Этот идентификатора определён, но уже не выполняется на указанной платформе. |
Error: Can’t create unique type from this type |
Только простые типы, такие как порядковые, вещественные и строки поддерживаются, если тип переопределён с помощью type НовыйТип = type СтарыйТип;. |
Hint: Local variable «Сообщение» does not seem to be initialized |
Это сообщение появляется, если компилятор думает, что локальная переменная будет использована (то есть появится в правой части выражения), в то время как она ещё не инициализирована (то есть не появлялась в левой части присваивания). |
Hint: Variable «Сообщение» does not seem to be initialized |
Это сообщение появляется, если компилятор думает, что переменная будет использована (то есть появится в правой части выражения), в то время как она ещё не инициализирована (то есть не появлялась в левой части присваивания). |
Warning: Function result variable does not seem to initialized |
Это сообщение появляется, если компилятор думает, что переменная результата функции будет использована (то есть появится в правой части выражения) перед её инициализацией (то есть перед тем, как она появится в левой части присваивания). |
Hint: Function result variable does not seem to be initialized |
Это сообщение появляется, если компилятор думает, что переменная результата функции будет использована (то есть появится в правой части выражения) перед её инициализацией (то есть перед тем, как она появится в левой части присваивания). |
Warning: Variable «Сообщение» read but nowhere assigned |
Вы прочитали значение переменной, но нигде не присвоили ей значение. |
Hint: Found abstract method: Сообщение |
Когда выводится предупреждение о создании класса/объекта с абстрактными методами, вы получаете эту подсказку, которая поможет вам найти неправильный метод. |
Warning: Symbol «Сообщение» is experimental |
Это означает, что используется идентификатор (переменная, процедура и т.п.), который объявлен как experimental. Экспериментальные идентификаторы могут быть удалены или изменят семантику в будущих версиях. Избегайте использовать эти идентификаторы, насколько это возможно. |
Warning: Forward declaration «Сообщение» not resolved, assumed external |
Это сообщение появляется, если вы объявили функцию в интерфейсе модуля в режиме macpas, не выполнили её. |
Warning: Symbol «Сообщение» is belongs to a library |
Это означает, что используется идентификатор (переменная, процедура и т.п.), который объявлен как library. Такие идентификаторы могут быть недоступны в других библиотеках. |
Warning: Symbol «Сообщ1» is deprecated: «Сообщ2» |
Это означает, что используется идентификатор (переменная, процедура и т.п.), который объявлен как deprecated. Такие идентификаторы могут быть недоступны в будущих версиях модуля/библиотеки. Избегайте использовать эти идентификаторы, насколько это возможно. |
Error: Cannot find an enumerator for the type «Сообщение» |
Это означает, что компилятор не может найти соответствующий нумератор для использования в цикле for. Для создания нумератора вам необходимо определить оператор нумератора или добавить метод public или published GetEnumerator для класса или объекта. |
Error: Cannot find a «MoveNext» method in enumerator «Сообщение» |
Это означает, что компилятор не может найти метод public MoveNext с возвращаемым типом Boolean в классе нумератора или объекте. |
Error: Cannot find a «Current» property in enumerator «Сообщение» |
Это означает, что компилятор не может найти свойство public Current с возвращаемым типом в классе нумератора или объекте. |
Error: Mismatch between number of declared parameters and number of colons in message string. |
In Objective-C, a message name automatically contains as many colons as parameters. In order to prevent mistakes when specifying the message name in FPC, the compiler checks whether this is also the case here. Note that in case of messages taking a variable number of arguments translated to FPC via an array of const parameter, this final array of const parameter is not counted. Neither are the hidden self and _cmd parameters. |
Note: Private type ”arg1.arg2” never used |
The indicated private type is declared but is never used in the code. |
Note: Private const ”arg1.arg2” never used |
The indicated private const is declared but is never used in the code. |
Note: Private property ”arg1.arg2” never used |
The indicated private property is declared but is never used in the code. |
Warning: Unit ”arg1” is deprecated |
This means that a unit which is declared as deprecated is used. Deprecated units may no longer be available in newer versions of the library. Use of this unit should be avoided as much as possible. |
Warning: Unit ”arg1” is deprecated: ”arg2” |
This means that a unit which is declared as deprecated is used. Deprecated units may no longer be available in newer versions of the library. Use of this unit should be avoided as much as possible. |
Warning: Unit ”arg1” is not portable |
This means that a unit which is declared as platform is used. This unit use and availability is platform specific and should not be used if the source code must be portable. |
Warning: Unit ”arg1” is belongs to a library |
This means that a unit which is declared as library is used. Library units may not be available in other libraries. |
Warning: Unit ”arg1” is not implemented |
This means that a unit which is declared as unimplemented is used. This unit is defined, but is not yet implemented on this specific platform. |
Warning: Unit ”arg1” is experimental |
This means that a unit which is declared as experimental is used. Experimental units might disappear or change semantics in future versions. Usage of this unit should be avoided as much as possible. |
Error: No complete definition of the formally declared objcclass ”arg1” is in scope |
Objecive-C classes can be imported formally, without using the the unit in which it is fully declared. This enables making forward references to such classes and breaking circular dependencies amongst units. However, as soon as you wish to actually do something with an entity of this class type (such as access one of its fields, send a message to it, or use it to inherit from), the compiler requires the full definition of the class to be in scope. |
Error: Gotos into initialization or finalization blocks of units are not allowed |
Gotos into initialization or finalization blockse of units are not allowed. |
Error: Invalid external name ”arg1” for formal class ”arg2” |
|
Error: Complete class definition with external name ”arg1” here |
When a class is declared using a formal external definition, the actual external definition (if any) must specify the same external name as the formal definition (since both definitions refer to the same actual class type). |
Warning: Possible library conflict: symbol ”arg1” from library ”arg2” also found in library ”arg3” |
Some OS do not have library specific namespaces, for those OS, the function declared as ”external ’libname’ name ’funcname’”, the ’libname’ part is only a hint, funcname might also be loaded by another library. This warning appears if ’funcname’ is used twice with two different library names. |
I haven’t used Pascal since high school, so if someone could help out that’d be great. I’m getting the following error (compiled with fpc):
project1.pas(9,11) Error: Forward declaration not solved «getLex(var ShortString)»
Here’s my code:
Program project1 (input, output);
var
mySentence: String;
num: integer;
procedure getLex(sentence: String); forward;
begin (* main *)
getLex(mySentence);
end. (* end main *)
procedure getLex(sentence: String);
var
(* variables used in getLex *)
begin
(* getLex stuff *)
end (* end getLex *)
I use num in getLex, does that matter?
Without order nothing can exist — without chaos nothing can evolve.
IIRC you can’t declare anything after the end of main i.e. «end.», only after other functions, which of course end in ‘end;’
Forward declarations should look like this:
Program project1 (input, output);var mySentence: String; num: integer;procedure getLex(sentence: String); forward;procedure main;begin (* main *) getLex(mySentence);end; (* end main *)procedure getLex(sentence: String);var (* variables used in getLex *)begin (* getLex stuff *)end (* end getLex *)begin main;end;
i.e. you can not have a procedure declaration after final «end.» .
The only reason to use forward declarations should be when you
have in the implementation section, or in the main program two(or more)
functions/procedures that use each other:
e.g.
....procedure proc1; forward;procedure proc2;begin ... proc1; ...end;procedure proc1;begin ... proc2; ...end;
Thanks guys.
Without order nothing can exist — without chaos nothing can evolve.