Was übersehe ich?

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
ErnstVolker
Beiträge: 336
Registriert: Di 17. Feb 2009, 10:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Was übersehe ich?

Beitrag von ErnstVolker »

Guten Abend,

ich bin mit meinem Projekt von einem Win 11 mit Lazarus Trunk 3.99 auf ein anderes Win 11 mit Lazarus Stable 3.2 umgezogen. Jetzt kommt beim compilieren folgende Meldung:

Error: Incompatible types: got "{Array Of Const/Constant Open} Array of SmallInt" expected "Array[0..50] Of LongInt"

Definiert ist das Array im Prozedurkopf unter "var" wie folgt:

yPos: array [0..50] of Integer = (253,285,290,285,285,279,279,279,274,274,274,274,270,270,270,270,266,266,266,266,262,262,262,262,258,258,258,258,245,239,253,256,256,252,233,233,221,221,149,133,128,118,108,97,91,81,75,67,56,40,28);

Im Quelltext weise ich an anderer Stelle andere Werte zu:

yPos:= [253,285,290,285,285,279,279,279,274,274,274,274,270,270,270,270,266,266,266,266,262,262,262,262,258,258,258,258,245,239,253,256,256,252,233,233,221,221,149,133,128,118,108,97,91,81,75,67,56,40,28];

Was habe ich denn da schon wieder falsch gemacht?

Ich wünsche allen ein schönes Osterfest!

Viele Grüße

Volker

Mathias
Beiträge: 6197
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Was übersehe ich?

Beitrag von Mathias »

auf ein anderes Win 11 mit Lazarus Stable 3.2 umgezogen
Genau das ist der Grund. Diese Funktion ist momentan erst der Trunk vorbehalten.

Da werden wir noch einen Moment Geduld haben, bis das in der Stable geht.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1435
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Was übersehe ich?

Beitrag von fliegermichl »

Ich vermute mal, daß der Fehler weder bei der Deklaration des Arrays noch bei der Zuweisung moniert wird. Eher bei der Verwendung als Parameter an eine Prozedur oder Funktion. Wie schaut denn deren Deklaration aus?

Normalerweise müsste das so gehen:

Code: Alles auswählen

type
 T50Int = array[0..50] of Integer;
const
 yPos : T50Int = (253, 285,....);

procedure ProcessArr(a : T50Int);
begin
  a[20] := 4;
end;
Zuletzt geändert von fliegermichl am Fr 29. Mär 2024, 12:02, insgesamt 1-mal geändert.

Mathias
Beiträge: 6197
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Was übersehe ich?

Beitrag von Mathias »

Ich vermute mal, daß der Fehler weder bei der Deklaration des Arrays noch bei der Zuweisung moniert wird.
Nach meiner muss es an Trunk/Stable liegen. Ich habe es probiert und kann es nachvollziehen. Bei der stable bekomme ich den gleichen Fehler wie oben beschrieben.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

ErnstVolker
Beiträge: 336
Registriert: Di 17. Feb 2009, 10:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Was übersehe ich?

Beitrag von ErnstVolker »

Ich wollte ja auch ursprünglich wieder eine Trunk verwenden, aber die aktuelle Trunk mit fpcupdeluxe installiert, installier mir kein ZEOS. Weder aus dem OPM, noch ein 8.0 Branch. Die Stabile-IDE 3.2 hat mir ZEOS 8.0 installiert.

Trunk fliegt mit dieser Fehlermeldung raus: ZDatasetParam.pas(2262,42) Error: Identifier idents no member "VUInt32" Hat hier jemand eine Idee was zu tun ist?

Auf meinem neuen Tuxedo-Linux bekomme ich mit fpcupdeluxe überhaupt kein Lazarus installiert. Weder Stable noch Trunk. Da steht im Log-File was von "double quoted strings" und make kann damit nix anfangen. Irgendwas in der Art. Ich hab's jetzt nicht im Kopf.

Die Debian-Pakete von Source-Forge habe ich noch nicht probiert.

Vielen Dank!

Mathias
Beiträge: 6197
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Was übersehe ich?

Beitrag von Mathias »

Trunk fliegt mit dieser Fehlermeldung raus: ZDatasetParam.pas(2262,42) Error: Identifier idents no member "VUInt32" Hat hier jemand eine Idee was zu tun ist?
Dies wäre eine Variante. Dann läuft es auch mit der Stable.

Code: Alles auswählen

type
  Tvector = array[0..2] of integer;
var
  vector: Tvector = (3, 2, 1);

  procedure SetVector;
  const
    v: Tvector = (1, 2, 3);
  begin
    vector := v;
  end;    
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

ErnstVolker
Beiträge: 336
Registriert: Di 17. Feb 2009, 10:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Was übersehe ich?

Beitrag von ErnstVolker »

Hallo Matthias,

hab' vielen Dank für Deine Antworten. Wenn man das Array dynamisch erstellt und zuweist, dann funktioniert die Zuweisung von Eelementen über eckige Klammern "ganz normal". Man darf es dann nur nicht unter "var" vornehmen wollen, sondern im Rumpf der Prozedur zuerst mit SetLength(yPos, 51) die Größe festlegen und dann die Elemente zuweisen. yPos:= [1,2,3,4,5,6,... usw.]. Eben stinknormale Arrayoperation... Ich Trottel :(

Antworten