Compiler beschwert sich über nicht vorhandene Fehler

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Compiler beschwert sich über nicht vorhandene Fehler

Beitrag von Komoluna »

Liebes Forum,

Ich habe mehrere Funktionen, mit dem gleichen Namen, die dasselbe mit verschiedenen Datentypen tun:

Code: Alles auswählen

function LimitTo(var Value: float; min, max: Float): integer;
function LimitTo(var Value: integer; min, max: integer): integer;
 
function LimitTo(Value, min, max: FloatArray): FloatArray; //FloatArray = n-dimensional vector
Bei folgendem Code:

Code: Alles auswählen

LimitTo(Velocity[0], -Properties.MaxSpeed, Properties.MaxSpeed); //ships.pas: Zeile 399
//Velocity = FloatArray
//Properties.MaxSpeed = Float
meckert der Compiler folgendermaßen:

Code: Alles auswählen

ships.pas(399,65) Error: Incompatible type for arg no. 3: Got "Extended", expected "LongInt"
extmath.pas(410,10) Hint: Found declaration: LimitTo(var LongInt,LongInt,LongInt):LongInt;
extmath.pas(395,10) Hint: Found declaration: LimitTo(var Extended,Extended,Extended):LongInt;
vectormath.pas(431,10) Hint: Found declaration: LimitTo(FloatArray,FloatArray,FloatArray):Dynamic Array Of Single;
ships.pas(667) Fatal: There were 1 errors compiling module, stopping
 
Warum beschwert sich der Compiler über angeblich falsche Parameter, wenn er doch die entsprechenden Funktionen findet?

MFG

Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

Benutzeravatar
theo
Beiträge: 10904
Registriert: Mo 11. Sep 2006, 19:01

Re: Compiler beschwert sich über nicht vorhandene Fehler

Beitrag von theo »

Ich nehme an, dass es mit dem "var" zu tun hat.
Was du übergibst, ist wahrsch. nicht veränderbar.

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: Compiler beschwert sich über nicht vorhandene Fehler

Beitrag von Komoluna »

ja, hast recht:

Code: Alles auswählen

 
var
  x: Float;
begin
  x := Velocity[0];
  LimitTo(x, -Properties.MaxSpeed, Properties.MaxSpeed);
  Velocity[0] := x;     
  [...]
geht.

Aber warum kann man nicht ein Array Element als Var übergeben?
Das müsste doch auch nur ein Float sein oder?
Kann der funktion doch egal sein, ob drumherum noch ein Array ist...

MFG

Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

Benutzeravatar
theo
Beiträge: 10904
Registriert: Mo 11. Sep 2006, 19:01

Re: Compiler beschwert sich über nicht vorhandene Fehler

Beitrag von theo »

Vllt ist es auch was anderes.

Du postest halt nicht, wo das Zeug definiert ist und den ganzen Kontext.

Warum ist dein Compiler der Meinung, dein "Float" (ich nehme an, das in Math defnierte, bei mir " float = extended; ") sein ein "Dynamic Array Of Single;"?

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

Re: Compiler beschwert sich über nicht vorhandene Fehler

Beitrag von Mathias »

Wie ist Velocity deklariert ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: Compiler beschwert sich über nicht vorhandene Fehler

Beitrag von Komoluna »

Velocity ist ein Array of Float:

Code: Alles auswählen

Velocity: FloatArray
MFG

Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

Benutzeravatar
theo
Beiträge: 10904
Registriert: Mo 11. Sep 2006, 19:01

Re: Compiler beschwert sich über nicht vorhandene Fehler

Beitrag von theo »

Hallo Komoluna, hast du meine Frage nicht gesehen?

Wie (wo) ist dein "float" definiert. Das ist ja kein eingebauter Typ.
Ist dein Floatarray evtl. anders (-wo) defniert?

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: Compiler beschwert sich über nicht vorhandene Fehler

Beitrag von Komoluna »

Nein, ich verwende den Floattyp aus der Unit math, und FloatArray ist auch nur einmal definiert.

MFG

Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

Benutzeravatar
theo
Beiträge: 10904
Registriert: Mo 11. Sep 2006, 19:01

Re: Compiler beschwert sich über nicht vorhandene Fehler

Beitrag von theo »

Komoluna hat geschrieben:Nein, ich verwende den Floattyp aus der Unit math, und FloatArray ist auch nur einmal definiert.
Dann ist also dein "Float" ein Alias für "Single"?
http://www.freepascal.org/docs-html/ref/refsu6.html
Mein "Float" ist ein Alias für "Extended".

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: Compiler beschwert sich über nicht vorhandene Fehler

Beitrag von Komoluna »

in meiner unit Math steht

Code: Alles auswählen

type
  float = extended;  //<<--- Zeile 71
MFG

Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

Benutzeravatar
theo
Beiträge: 10904
Registriert: Mo 11. Sep 2006, 19:01

Re: Compiler beschwert sich über nicht vorhandene Fehler

Beitrag von theo »

Komoluna hat geschrieben:in meiner unit Math steht

Code: Alles auswählen

type
  float = extended;  //<<--- Zeile 71
Ja, aber warum sagt dein Compiler dann:
vectormath.pas(431,10) Hint: Found declaration: LimitTo(FloatArray,FloatArray,FloatArray):Dynamic Array Of Single;
wenn das offenbar so deklariert ist:
function LimitTo(Value, min, max: FloatArray): FloatArray;
:?:

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

Re: Compiler beschwert sich über nicht vorhandene Fehler

Beitrag von Mathias »

Normalerweise ist ein float ein single, und ein double ein extented.
Float ist 32bit und double 64bit.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten