Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Delphi 1: Objekt- oder Klassentyp erwartet


Alstar - Mi 26.07.06 18:07
Titel: Delphi 1: Objekt- oder Klassentyp erwartet
Hallo!

Da ich keinen entsprechenden Ersatz für die ZLib für Delphi 1 gefunden habe, dachte ich mir, ich könnte die Unit ja auch selber portieren.
Allerdings bin ich jetzt auf einen Fehler gestoßen, der mir zu denken gibt: In der Zeile

Delphi-Quelltext
1:
constructor TCustomZLibStream.Create(Strm: TStream);                    

Zeigt mir der Compiler an:
Zitat:

Fehler 147: Objekt- oder Klassentyp erwartet.


Ich habe keine Ahnung, warum gerade da, der Delphi 1-Compiler spinnt. Die Klasse ist deklariert und das nimmt er auch anstandslos an :nixweiss:
Hat jemand ne Ahnung, was der Fehler is?

Alstar

Edit: Diese Fehlermeldung tritt im Implementations-Teil auf


wdbee - Do 27.07.06 11:01

Um das erkennen zu können, bräuchte man mehr Code


Alstar - Do 27.07.06 11:32

Aha?!
Was möchtest Du denn gerne für Source haben? Vom Deklarationsteil, der Methode davor, der Methode danach?

Alstar


wdbee - Do 27.07.06 11:46

Also die Deklaration diese einen Klasse und der Implementationsteil ab einer Methode davor sollte zeigen, ob der Ort der Fehlermeldung und das Problem des Compilers auch das sind als was wir sie ansehen.


Alstar - Do 27.07.06 11:55

Deklaration:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
{ Abstract ancestor class }
  TCustomZlibStream = class(TStream)
  private
    FStrm: TStream;
    FStrmPos: Integer;
    FOnProgress: TNotifyEvent;
    FZRec: TZStreamRec;
    FBuffer: array [0..4095of Char;
  protected
    procedure Progress(Sender: TObject); dynamic;
    property OnProgress: TNotifyEvent read FOnProgress write FOnProgress;
    constructor Create(Strm: TStream);
  end;


Implementation

Delphi-Quelltext
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:
procedure DecompressToUserBuf(const InBuf: Pointer; InBytes: Integer;
  const OutBuf: Pointer; BufSize: Integer);
var
  strm: TZStreamRec;
begin
  FillChar(strm, sizeof(strm), 0);
  @strm.zalloc := @zlibAllocMem;
  @strm.zfree := @zlibFreeMem;
  strm.next_in := InBuf;
  strm.avail_in := InBytes;
  strm.next_out := OutBuf;
  strm.avail_out := BufSize;
  DCheck(inflateInit_(strm, zlib_version, sizeof(strm)));
  try
    {if} DCheck(inflate(strm, Z_FINISH)) {<> Z_STREAM_END then
      raise EZlibError.CreateRes(@sTargetBufferTooSmall);}

  finally
    DCheck(inflateEnd(strm));
  end;
end;

{ TCustomZlibStream }

constructor TCustomZLibStream.Create(Strm: TStream);
begin
  inherited Create;
  FStrm := Strm;
  FStrmPos := Strm.Position;
  FZRec.zalloc := zlibAllocMem;
  FZRec.zfree := zlibFreeMem;
end;


Alstar


wdbee - Do 27.07.06 12:07

Was mir sofort auffällt:
In der Deklaration steht die Zeile constructor Create nach der Zeile property OnProgress.

Ob das zulässig ist weiß ich nicht. Stell die Zeile mit constructor mal vor die anderen Zeilen (Meine Logik in solchen Fällen, erst die Klassen-Methoden, dann die Instanz-Methoden, dann die Eigenschaften)


Alstar - Do 27.07.06 12:10

Nein, das funktioniert nicht. Und selbst wenn, hätte es mich gewundert, da es sich ja um ein Delphi 1 spezifisches Verhalten zu handeln scheint und nicht um ein allgemeines Deklarationsproblem

Alstar


wdbee - Do 27.07.06 12:30

Leider sehe ich auch keinen Fehler und meinen D1 habe ich nicht auf den Rechner hier.
Was mir schon mal passiert ist: Ich hatte versteckte Zeichen in der Zeile (durch Tippfehler). Die sorgten auch für seltsame Meldungen. Durch Löschen der ganzen Zeile und neu eintippen war der Spuk vorbei.


Alstar - Do 27.07.06 14:44

user profile iconwdbee hat folgendes geschrieben:
[...]Was mir schon mal passiert ist: Ich hatte versteckte Zeichen in der Zeile (durch Tippfehler). Die sorgten auch für seltsame Meldungen. Durch Löschen der ganzen Zeile und neu eintippen war der Spuk vorbei.

Ist bei mir leider auch nicht der Fall :(

Alstar