Error forward declaration not solved

Ошибка: "Forward declaration not solved" Lazarus Решение и ответ на вопрос 1565904

9 / 9 / 7

Регистрация: 25.10.2015

Сообщений: 47

1

29.10.2015, 17:37. Показов 12216. Ответов 1


Добрый день.
Есть такая программа:

Delphi
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
unit Unit2;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Buttons,
  StdCtrls;
 
type
 
  { TForm2 }
 
  TForm2 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    SpeedButton1: TSpeedButton;
    SpeedButton2: TSpeedButton;
    procedure FormCloseQuery(Sender: TObject; var CanClose: boolean);
    procedure SpeedButton1Click(Sender: TObject);
    procedure SpeedButton2Click(Sender: TObject);
    function fcode(text1,code:string):string;
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form2: TForm2;
 
implementation
uses Unit1;
 
{$R *.lfm}
 
{ TForm2 }
 
 
 
procedure TForm2.FormCloseQuery(Sender: TObject; var CanClose: boolean);
begin
  halt();
end;
 
procedure TForm2.SpeedButton1Click(Sender: TObject);
begin
  Form1.Show();
  Form2.Hide();
end;
 
procedure TForm2.SpeedButton2Click(Sender: TObject);
begin
  if (length(Edit1.Text)>0) and (length(Edit3.Text)>0) then
  begin;
   Edit2.Text:=fcode(Edit1.Text,Edit3.Text);
  end;
end;
 
function fcode(text1,code:string):string;
begin;
  fcode:='ssss';
end;
 
end.

Это только вторая форма. При нажатии на вторую кнопку должна запускаться функция 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.

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Error nfsend connect error no such file or directory
  • Error newline required at end of file but not found eol last
  • Error new undeclared first use in this function
  • Error new types may not be defined in a return type
  • Error new encoding utf8 is incompatible with the encoding of the template database win1251

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

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