![]() |
Der Compiler meckert - nur wieso?
Hallo DP!
Ich arbeite ja gerade an einer erweiterbaren Scriptsprache, und implementiere gerade meine Variablenfunktionalität... Da meckert mir der Compiler auf einmal was vor von wegen "Inkompatible Typen". Okay, klingt trivial, aber irgendwie komme ich nicht dahinter:
Delphi-Quellcode:
Wer weiß, was Willi will? (Wollte die Alliteration beibehalten und hab meinen Compiler deshalb mal Willi genannt :D)
procedure CREATEVAR(Params:array of Pointer; var Vars, VarNames:array of PString);
var I:integer; begin I:=-1; repeat inc(I); until(VarNames[I]^=string(Params[0]))or(I>High(VarNames)); if(I>High(VarNames))then begin SetLength({*}VarNames, Length(VarNames)+1); //{*} = Hier kommt der Fehler SetLength({*}Vars, Length(Vars)+1); //{*} = Hier auch! GetMem(VarNames[I], Length(string(Params[0]))); VarNames[I]^:=string(Params[0]); end; end; Grüße, Euer LDer. |
Re: Der Compiler meckert - nur wieso?
Anstatt Length(Array) evtl. High(Array)?
Die Funktion Length bezieht sich ja nur auf Strings... Etwa so..
Delphi-Quellcode:
function Length(Value : String) : Integer
|
Re: Der Compiler meckert - nur wieso?
Was ist PString? Ein PChar?
|
Re: Der Compiler meckert - nur wieso?
Ich finds auch merkwürdig. Welche Typen sollen den nach Meinung des Compilers inkompatibel sein? Das verrät er doch normalerweise auch.
Hast du vielleicht noch eine andere SetLength-Prozedur in irgendwelchen eingebunden Units, die zu dem Problem führt? Vielleicht sicherheitshalber mal aus SetLength ein System.SetLength machen? Ratende Grüße Bommel |
Re: Der Compiler meckert - nur wieso?
Zitat:
Ich setze das auch seit vielen Jahren problemlos so ein. Eigentlich kann das also nicht die Ursache sein. Bis denn Bommel |
Re: Der Compiler meckert - nur wieso?
Zitat:
da Delphi bei sowas auf "absolut" gleiche Typen besteht. |
Re: Der Compiler meckert - nur wieso?
Zitat:
Wieder was gelernt :mrgreen: Aber sollte dann High() nicht genau den gleichen Wert abrufen? :gruebel: |
Re: Der Compiler meckert - nur wieso?
Zitat:
Code:
gelten. Kann man sich wohl aussuchen, was einem besser gefällt. Ob das irgendwelche Auswirkungen hat (Performance oder so) - keine Ahnung. :)
High(Array) = Length(Array)-1
Bis denn Bommel |
Re: Der Compiler meckert - nur wieso?
Wie sieht es denn so aus?
Delphi-Quellcode:
type
PStringArray = array of PString; ... procedure CREATEVAR(Params:array of Pointer; var Vars, VarNames: PStringArray); var I:integer; begin I:=-1; repeat inc(I); until(VarNames[I]^=string(Params[0]))or(I>High(VarNames)); if(I>High(VarNames))then begin SetLength({*}VarNames, Length(VarNames)+1); //{*} = Hier kommt der Fehler SetLength({*}Vars, Length(Vars)+1); //{*} = Hier auch! GetMem(VarNames[I], Length(string(Params[0]))); VarNames[I]^:=string(Params[0]); end; end; |
Re: Der Compiler meckert - nur wieso?
Stimmt, High(Array) = Length(Array)-1, finde ich besser.
Und ob ich nun
Delphi-Quellcode:
oder
System.SetLength(VarNames, Length(VarNames)+1);
Delphi-Quellcode:
schreibe, interessiert meinen Delphi-Compiler recht wenig. für ihn passt dieses Array nicht in ein SetLength. Sonst bin ich auch immer wunderbar damit gefahren :(
System.SetLength(Vars, Length(Vars)+1);
Also, vielleicht findet wer doch noch was :D Bis denn, euer LDer Add: Redbox... So getestet. Es geht mit dem Typen PStringArray. Warum? Keine Ahnung, normal solltes ja äquivalent sein... isset aber nich... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:44 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 by Thomas Breitkreuz