0

I get the error "Error 1(E4) "end." or implementation section members (types or methods) expected."

Nowhere on the internet I can find information about this error.

I get this error because of this line of the AssemblyInfo.pas file:

Implementation
    SomeMethod();
end.

I work in Delphi Prism.

Sertac Akyuz
  • 54,131
  • 4
  • 102
  • 169
petko_stankoski
  • 10,459
  • 41
  • 127
  • 231

1 Answers1

0

That's not valid inside implementation.

The Pascal (which Delphi Prism is based loosely on) unit consists of a couple of sections. The interface section provides the same functionality as the C/C++ header file; it exposes the public content to users of the code unit.

The implementation is like the C/C++ source file that the header exposes. It's where you actually implement the content the interface unit made available. Therefore, it should contain the actual code for the methods and functions.

A quick example (Delphi code, but is pretty similar):

unit Test.NyClass;

interface

// Defines types and so forth that, if exposed via the proper declaration, can be seen outside
// this unit simmply by adding this unit to the uses clause of the calling code.
uses 
  SysUtils;

type
  TMyClass=class(TObject)
    FMyNumber: Integer;     // protected members (no specifier, so defaults to protected)
    FMyString: String;
  private                     
    function GetMyNumber: Integer;    // Getters
    function GetMyString: string;     
    procedure SetMyNumber(const Value: Integer);  // Setters
    procedure SetMyString(const Value: string);
  published
    property MyNumber: Integer read GetMyNumber write SetMyNumber;  // properties exposed to class users
    property MyString: string read GetMyString write SetMyString;
  end;

implementation

// Actually provides the implementation for the getters/setters, any additional methods, 
// types not needed outside this implementation section, etc.

// Optional uses clause. Add units here you only need access to in the implementation code;
// this prevents circular references ("Unit A uses Unit B which uses Unit A").
uses
  SomeOtherUnit;           

// Implementation of the getters and setters declared for the properties above. Outside code
// can't call these directly (they were declared as private), but they're called automatically
// when the corresponding property is referenced.
function TMyClass.GetMyNumber: Integer;
begin
  Result := FMyNumber;
end;

function TMyClass.GetMyString: string;
begin
  Result := FMyString;
end;

procedure TMyClass.SetMyNumber(const Value: Integer);
begin
  if FMyNumber <> Value then
    FMyNumber := Value;
end;

procedure TMyClass.SetMyString(const Value: string);
begin
  if FMyString <>  Value then
    FMyString := Value;
end;

// Optional initialization section. This is what your code is probably intending to use (if Prism
// supports it - don't have it on this machine to check).
initialization
  // Any necessary loading initialization, etc. Called when the unit is being loaded into memory,
  // so you have to be careful what you're doing here.

// Optional finalization section. This is where you do cleanup of anything  allocated in the
// initialization section.
finalization

end.
Ken White
  • 123,280
  • 14
  • 225
  • 444
  • What is the equivalent to the Main() method in C# in Delphi Prism? – petko_stankoski Dec 01 '11 at 15:10
  • `Main()`. :) It's usually found in `Program.pas`. And no, this is an explanation of why the code you posted won't compile; it's not `AssemblyInfo.pas` (which you can see because the `unit` name at the top isn't `AssemblyInfo`. ) You should look at some of the Prism demos to help you get started (or just start a new application of some type and browse through the `.pas` files it creates). – Ken White Dec 01 '11 at 15:23