simple Wertübergabe funktioniert nicht

Für Fehler in Lazarus, um diese von anderen verifizieren zu lassen.
MickDundee
Beiträge: 9
Registriert: Fr 4. Sep 2015, 14:03

Re: simple Wertübergabe funktioniert nicht

Beitrag von MickDundee »

Ich hatte jetzt gedacht, es liegt tatsächlich an der 0-basierten Arrayverwaltung, gerade weil die ersten drei erzeugten Objekte die Objektnummern 1..3 tragen jedoch in der myObjs_liste als Einträge 0..2 drin sind.
Aber ich habe jetzt nochmals per Debugger Schritt für Schritt den Programmablauf nachvollzogen. Der Fehler besteht nach wie vor, obwohl ich eindeutig in TmyObj.calc auf das richtige myObj in myObjs_liste[myObjnummer] mit einer existierenden und mit dem korrekten .wert versehenen .inputliste[1] zugreife.

Es besteht noch immer das gleiche Problem, dass ich lokalen Variablen keinen Wert zuweisen kann.

Code: Alles auswählen

 
procedure TmyObj2.calc(myObjnummer:word);
var I_, calc:myrange;
    i,j:word;
begin
    calc:=0;
    ...
 
nun geändert zu
 
procedure TmyObj2.calc(myObjnummer:word);
var I_, ergebnis:myrange;
    i,j:word;
begin
    ergebnis:=0;
    ...
 


ergebnis:=0; wird zwar im Einzelschritt durchgeführt aber ergebnis wird nicht gesetzt, es ist hinterher = 5689599
p.s. es gibt keine globale Variable ergebnis
vor ergebnis:=0; laut debugger ergebnis=5689572
nach ergebnis:=0; laut debugger ergebnis=5689344

verwende ich statt
var I_, ergebnis:myrange;
nun
var I_, ergebnis:Shortint; (denn -10..10 ist ja eine subrange u.a. von shortint)
dann funktioniert es.
vor ergebnis:=0; laut debugger ergebnis=-28
nach ergebnis:=0; laut debugger ergebnis=0

Also ist es eine Sache von
typ myrange = -10..10;

Gibt es da was, was in Delphi geht aber in Lazarus/FPC nicht?

btw.: überall
{$IFDEF FPC}
{$MODE Delphi}
{$ENDIF}
gesetzt

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: simple Wertübergabe funktioniert nicht

Beitrag von Michl »

Bitte verstehe das nicht falsch. Es gibt immer mal wieder Fälle, wo ein Code in Delphi funktioniert und in Lazarus nicht. Auf Besonderheiten von Delphi, die nicht der Pascal-Konvention entsprechen, wird in FreePascal keine besonderer Rücksicht genommen. Hier im Forum findet sich eine Zahl derartiger Fälle (Reihenfolge der Abarbeitung von Methodenparametern, die Weiterverwendung von Schleifenvariablen etc.).

Bitte versuche dein Projekt soweit zu reduzieren bis du es hier hochladen kannst (oder erstelle ein Minimalbsp, ohne Executable, als Zip). Dann kann jemand anderes das Verhalten gegenchecken.

PS: Im Bugtracker gab es afaik mehrere Einträge mit Rangetypen. Möglicherweise ist dies tatsächlich ein Bug und wurde evtl. auch schon gefixt.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Antworten