AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Der Compiler meckert - nur wieso?

Ein Thema von LDericher · begonnen am 15. Okt 2009 · letzter Beitrag vom 15. Okt 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von LDericher
LDericher

Registriert seit: 29. Jan 2007
Ort: Erkelenz
224 Beiträge
 
Delphi 7 Enterprise
 
#1

Der Compiler meckert - nur wieso?

  Alt 15. Okt 2009, 12:05
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:
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;
Wer weiß, was Willi will? (Wollte die Alliteration beibehalten und hab meinen Compiler deshalb mal Willi genannt )

Grüße,
Euer LDer.
"Clicking this button you agree with our Verantwortungsverzicht und Abkommen."
Zitat von Ein unentschlossener Programmierer:
Enabled:=true or false or true or false or true or false;
  Mit Zitat antworten Zitat
Benutzerbild von Forlan
Forlan

Registriert seit: 17. Feb 2008
Ort: Herford
265 Beiträge
 
Delphi 2007 Architect
 
#2

Re: Der Compiler meckert - nur wieso?

  Alt 15. Okt 2009, 12:12
Anstatt Length(Array) evtl. High(Array)?

Die Funktion Length bezieht sich ja nur auf Strings...

Etwa so..

function Length(Value : String) : Integer
Marcel
マルセル
www.youtube.com/beethoven1990
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Der Compiler meckert - nur wieso?

  Alt 15. Okt 2009, 12:13
Was ist PString? Ein PChar?
Markus Kinzler
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
652 Beiträge
 
Delphi 12 Athens
 
#4

Re: Der Compiler meckert - nur wieso?

  Alt 15. Okt 2009, 12:14
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
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
652 Beiträge
 
Delphi 12 Athens
 
#5

Re: Der Compiler meckert - nur wieso?

  Alt 15. Okt 2009, 12:18
Zitat von Forlan:
Die Funktion Length bezieht sich ja nur auf Strings...
Das stimmt so nicht. Oder um es mit der Delphi-Hilfe zu sagen: "Gibt die Anzahl der Zeichen eines Strings oder der Elemente eines Array zurück."

Ich setze das auch seit vielen Jahren problemlos so ein. Eigentlich kann das also nicht die Ursache sein.

Bis denn
Bommel
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#6

Re: Der Compiler meckert - nur wieso?

  Alt 15. Okt 2009, 12:20
Zitat:
var Vars, VarNames: array of PString);
dieses im Zusammenhang mit einem Varparameter ist in Delphi eh unmöglich,
da Delphi bei sowas auf "absolut" gleiche Typen besteht.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Forlan
Forlan

Registriert seit: 17. Feb 2008
Ort: Herford
265 Beiträge
 
Delphi 2007 Architect
 
#7

Re: Der Compiler meckert - nur wieso?

  Alt 15. Okt 2009, 12:20
Zitat von Bbommel:
Zitat von Forlan:
Die Funktion Length bezieht sich ja nur auf Strings...
Das stimmt so nicht. Oder um es mit der Delphi-Hilfe zu sagen: "Gibt die Anzahl der Zeichen eines Strings oder der Elemente eines Array zurück."

Ich setze das auch seit vielen Jahren problemlos so ein. Eigentlich kann das also nicht die Ursache sein.

Bis denn
Bommel
Okay, ich hab length() bisher nur für Strings benutzt

Wieder was gelernt

Aber sollte dann High() nicht genau den gleichen Wert abrufen?
Marcel
マルセル
www.youtube.com/beethoven1990
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
652 Beiträge
 
Delphi 12 Athens
 
#8

Re: Der Compiler meckert - nur wieso?

  Alt 15. Okt 2009, 12:23
Zitat von Forlan:
Aber sollte dann High() nicht genau den gleichen Wert abrufen?
Ich selbst setze High kaum ein, aber vom Ergebnis her müsste glaube ich in den meisten Fällen
Code:
High(Array) = Length(Array)-1
gelten. Kann man sich wohl aussuchen, was einem besser gefällt. Ob das irgendwelche Auswirkungen hat (Performance oder so) - keine Ahnung.

Bis denn
Bommel
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Der Compiler meckert - nur wieso?

  Alt 15. Okt 2009, 12:27
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von LDericher
LDericher

Registriert seit: 29. Jan 2007
Ort: Erkelenz
224 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Der Compiler meckert - nur wieso?

  Alt 15. Okt 2009, 12:29
Stimmt, High(Array) = Length(Array)-1, finde ich besser.

Und ob ich nun
  System.SetLength(VarNames, Length(VarNames)+1); oder
  System.SetLength(Vars, Length(Vars)+1); 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

Also, vielleicht findet wer doch noch was

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...
"Clicking this button you agree with our Verantwortungsverzicht und Abkommen."
Zitat von Ein unentschlossener Programmierer:
Enabled:=true or false or true or false or true or false;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz