Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Merkwürdige Fehlermeldung (Compiler) (https://www.delphipraxis.net/56500-merkwuerdige-fehlermeldung-compiler.html)

Martin K 6. Nov 2005 20:50


Merkwürdige Fehlermeldung (Compiler)
 
Hi,
ich benutze die Componente TBassdllPlayer und hab diesen Code geschrieben:
Wenn ihr den TBassdllPlayer nicht kennt, macht nix - hab die Erklärung dran geschrieben:
Delphi-Quellcode:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
     //Gesamtlänge einer Sounddatei- Aktuelle Position(=verbleibende Zeit in s)*1000 -> in ms
  Sleep((BassdllPlayer1.SongLength - BassdllPlayer1.Position)*1000);
end;
Ich will also abfragen, wie lange die Musik noch läuft, und dann das Programm beenden.

Dann kommt aber diese Fehlermeldung:
Zitat:

[Warning] Unit1.pas(XX): Combining signed and unsigned types - widened both operands
Damit kann ich nun leider überhaupt nix anfangen... :gruebel:
Kann mir einer das übersetzen oder sagen, wie ich den Code oben verändern muss, damit die Meldung nicht mehr kommt ?

chaosben 6. Nov 2005 20:54

Re: Merkwürdige Fehlermeldung (Compiler)
 
Das Ganze heisst überdeutscht etwa soviel wie:
Ein vorzeichenbehafteter und ein nicht-vorzeichenbehafteter Typ wurden kombiniert. Beide Typen wurden erweitert, .. damits klappt ;)

Ich vermute mal, das SongLength ohne Vorzeichen ist und Position mit Vorzeichen. Deshalb die Meldung.

Martin K 6. Nov 2005 21:01

Re: Merkwürdige Fehlermeldung (Compiler)
 
Hmmm...
Heißt also, dass einer von beiden ein Vorzeichen hat (+ od. -) und der andere nicht.. Oder was???
Aber seit wann hat denn die Zeit in s ein Vorzeichen, ich kenn keine negative Zeit :wink:
Und wie soll die Position denn ein Vorzeichen haben?
Das ist doch eine Zeitangabe zwischen 0 und SongLength, also auf jeden Fall größer als 0 !!!

Und wie wurden die 'erweitert'?

Ich mein ja nur, eigentlich ist es ja egal, da das Programm auch so läuft...
aber es ist ja schließlich eine 'Warning', die nehme ich eigentlich immer ernst :angel2:

Nikolas 6. Nov 2005 21:05

Re: Merkwürdige Fehlermeldung (Compiler)
 
Sag doch mal wie die beiden Variablen deklariert wurden.
Es ist dem Compiler egal, was in den Variablen steht, es geht nur darum, welchen Typ sie haben.

Martin K 6. Nov 2005 21:08

Re: Merkwürdige Fehlermeldung (Compiler)
 
Ich glaub ich hab's jetzt:
Delphi-Quellcode:
SongLength : Integer;
Position : Cardinal;
Also kann nur SongLength positive und negative Werte annehmen, vgl. Delphi Hilfe:
Delphi-Quellcode:
Type      Range                   Format
--------------------------------------------------- 
Integer   –2147483648..2147483647  signed 32-bit
Cardinal  0..429496729             unsigned 32-bit
Hier steht's ja alles: Integer signed (- und +), Cardinal unsigned (kein Vorzeichen).

Aber was hat das jetzt mit meinem Code oben zu tun ??

(ist doch auch ein Schwachsinn, die Länge eines Sounds in Integer anzugeben...
Ein Sound kann doch nicht kürzer als 0 sec sein!)

Martin K 6. Nov 2005 21:17

Re: Merkwürdige Fehlermeldung (Compiler)
 
Also ich gehe mal davon aus, dass ich diese Meldung getrost vernachlässigen kann, da SongLength eh immer positiv ist.

Aber mal allgemein zu den beiden Typen Integer und Cardinal:
Eigentlich ist es doch egal, ob mit oder ohne Vorzeichen, da ohne Vorzeichen (Cardinal) ja immer positiv bedeutet.

Also müsste ich doch dann beide Typen ganz normal addieren und subtrahieren können...
Aber warum gibt der Compiler dann eine Fehlermeldung raus ?

Aenogym 6. Nov 2005 21:21

Re: Merkwürdige Fehlermeldung (Compiler)
 
Zitat:

Zitat von Martin K
Also ich gehe mal davon aus, dass ich diese Meldung getrost vernachlässigen kann, da SongLength eh immer positiv ist.

Aber mal allgemein zu den beiden Typen Integer und Cardinal:
Eigentlich ist es doch egal, ob mit oder ohne Vorzeichen, da ohne Vorzeichen (Cardinal) ja immer positiv bedeutet.

Also müsste ich doch dann beide Typen ganz normal addieren und subtrahieren können...
Aber warum gibt der Compiler dann eine Fehlermeldung raus ?

ich nutze auch die bass.dll und habe genau dieselbe warnung, wie du ;)
das klappt ja auch alles. es ist kein fehler. eben nur eine warnung, dass du eine rechenoperation mit zwei verschiedenen typen ausführst. unter umständen könnte das zu problemen führen - in deinem fall aber nicht.
zur not kannst du für die betreffende zeile ja die warnung ausschalten (ging imho mit einem compiler-schalter).

aenogym

Martin K 6. Nov 2005 21:31

Re: Merkwürdige Fehlermeldung (Compiler)
 
Jetzt hab ich's:
Das liegt nicht an der Kombination von SongLength und Position,
sondern an dem Befehl Sleep(), der eine Zahl vom Typ Cardinal erwartet, aber mit SongLength auch einen Integer-Wert enthält.
Wenn dieser nun negativ wäre, dann weiß er nix mit Sleep(milliseconds: Cardinal) anzufangen und gibt eine Fehlermeldung raus.

Im Klartext:
Das funktioniert einwandfrei:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var x, z: Integer; y: Cardinal;
begin
  x :=-7;
  y := 5;
  z := x + y; //ergibt also -7 + 5 = -2, bei z vom Typ Integer kein Problem!
end;
Aber hier gibt's einen Fehler:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var x: Integer; y, z: Cardinal;
begin
  x :=-7;
  y := 5;
  z := x + y; //z =-2, aber ein Cardinal-Typ -> Fehlermeldung
end;
Das geht zwar, es gibt aber trotzdem eine Warnmeldung:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var x: Integer; y, z: Cardinal;
begin
  x := 2;
  y := 5;
  z := x + y; //Warnmeldung, da x auch negativ sein könnte
end;

Zitat:

Zitat von Aenogym
zur not kannst du für die betreffende zeile ja die warnung ausschalten (ging imho mit einem compiler-schalter).

Wie geht das :?:

Aenogym 6. Nov 2005 21:37

Re: Merkwürdige Fehlermeldung (Compiler)
 
Zitat:

Zitat von Martin K
Wie geht das :?:

so:

Delphi-Quellcode:
{$WARNINGS OFF}
sleep(...);
{$WARNINGS ON}
damit deaktivierst/aktivierst du sämtliche warnungen

aenogym

Martin K 6. Nov 2005 21:40

Re: Merkwürdige Fehlermeldung (Compiler)
 
Zitat:

Zitat von Aenogym
Delphi-Quellcode:
{$WARNINGS OFF}
sleep(...);
{$WARNINGS ON}
damit deaktivierst/aktivierst du sämtliche warnungen

aenogym

Cooool, das wusste ich noch gar nicht....

Warum gibt er eigentlich nicht diese Fehlermeldung raus (z.B. für den obigen Quellcode):
Zitat:

[Warning] Unit1.pas(XX): Variable 'x' might be negative
Wäre doch viel logischer !


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:45 Uhr.
Seite 1 von 2  1 2      

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