![]() |
[D2006] Bug? class operator Inc & Implicit -> Falsch
Hi!
Ehe ich im QualityCentral einen großen Aufstand mache, will ich gern von euch wissen, ob das ein Bug oder ein Feature ist. Beschreibung: Benutzt man das Inc-Kommando mit einem Record, dessen Klassenoperatoren "Inc" und der implizite Typecast zu "Integer" definiert sind, gibt ein Inc Aufruf mit einem Parameter (oder zwei [Wert des zweiten=1]) einen sinnlosen Wert zurück. Übergibt man indessen als zweiten Parameter einen Wert größer als 1 oder definiert den impliciten Typecast zu Integer nicht, geht alles seinen gewohnten Gang. Getestet in: D2006 Enterprise Programm zum Nachvollziehen:
Delphi-Quellcode:
program bugtest;
{$APPTYPE CONSOLE} uses SysUtils; type TMyRecord = record Data : Integer; class operator Implicit(ARecord : TMyRecord) : Integer; class operator Add(ARecord : TMyRecord; AInteger : Integer) : TMyRecord; class operator Inc(AAmount : Integer) : TMyRecord; end; { TMyRecord } class operator TMyRecord.Add(ARecord: TMyRecord; AInteger: Integer): TMyRecord; begin Result.Data:=ARecord.Data+AInteger; writeln('Adding ',AInteger,' to ',ARecord.Data, '=>', Result.Data); end; class operator TMyRecord.Implicit(ARecord: TMyRecord): Integer; begin Result:=ARecord.Data; Writeln('Casting ', ARecord.Data, ' as Integer =>',Result); end; class operator TMyRecord.Inc(AAmount: Integer): TMyRecord; begin Writeln('Inc ', Result.Data, ' by ', AAmount); Result:=Result+AAmount; end; var mr : TMyRecord; begin mr.Data:=5; Inc(mr, 2); Writeln('Next line has to show "7"'); Writeln(mr.Data); writeln('----------------------'); mr.Data:=5; Inc(mr, 1); Writeln('Next line has to show "6"'); Writeln(mr.Data); Readln; end. |
Re: [D2006] Bug? class operator Inc & Implicit -> Fal
*push*
|
Re: [D2006] Bug? class operator Inc & Implicit -> Fal
Hallo,
Du hast einen Fehler in Deiner Deklaration:
Delphi-Quellcode:
Was soll denn hier erhöht werden? Result ist undefiniert und eine Klassenmethode kann auf keine Objekt-Member zugreifen.
class operator TMyRecord.Inc(AAmount: Integer): TMyRecord;
begin Writeln('Inc ', Result.Data, ' by ', AAmount); Result:=Result+AAmount; end; Richtig ist die Implementierung des Operators Inc so:
Delphi-Quellcode:
Du musst ja angeben, welchen Record Du bearbeiten willst.
class operator TMyRecord.Inc(ARecord: TMyRecord; AAmount: Integer): TMyRecord;
begin Writeln('Inc ', ARecord.Data, ' by ', AAmount); Result:=ARecord+AAmount; end; Gruß xaromz |
Re: [D2006] Bug? class operator Inc & Implicit -> Fal
Danke für den Hinweise.
Des Rätsels Lösung ist folgende fehlerhafte Zeile in der Hilfe (an die ich mich gehalten habe): Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz