[delphi] Operator not applicable to this operand type

Pagina: 1
Acties:
  • 130 views sinds 30-01-2008
  • Reageer

  • Bint
  • Registratie: Juli 2002
  • Laatst online: 18-04 14:22
Dag, ik had net een topic geopend dat geen nut had, dat was stom van me, maar nu zit ik wel met een probleem
ik heb de volgende code:

Delphi:
1
2
3
4
procedure bepaal_foo(unstrict: Boolean);
begin
  if(((foo1 AND $08) or (foo2 AND $04)) and ((foo3 < 3) OR unstrict)) then foo () 
end;


foo1, foo2 en foo3 zijn integers, unstrict is, zoals je ziet, een boolean.

Maar nu krijg ik dus de volgende foutmelding: Operator not applicable to this operand type
Ik heb al op google gezocht, en ik denk dat het heeft te maken met

code:
1
((foo3 < 3) OR unstrict)
, maar ben er niet zeker van.

Memories of yesterday, will grow, but never die


  • rrrandy
  • Registratie: Juli 2005
  • Laatst online: 25-01 15:24
Het heeft te maken met de eerste twee expressies foo1 AND $08 en foo2 AND $04. Boolean operatoren zijn niet toe te passen op Integers.

Verwijderd

Moet je van
foo1 AND $08 en foo2 AND $04 niet iets maken als
foo1 AND $08 = $08 en foo2 AND $04 = $04 of
foo1 AND $08 <> $08 en foo2 AND $04 <> $04 .
je vergelijkt de expressie "fooX AND $X" met niks

  • whoami
  • Registratie: December 2000
  • Laatst online: 17-04 23:42
Is het niet zo dat & (in C) niet hetzelfde is als de logische AND ?
Ik weet niet wat de shift-operators zijn in Delphi, maar het lijkt me niet dat dit 'AND' is ?

https://fgheysels.github.io/


Verwijderd

whoami schreef op dinsdag 10 januari 2006 @ 12:03:
Is het niet zo dat & (in C) niet hetzelfde is als de logische AND ?

Ik weet niet wat de shift-operators zijn in Delphi, maar het lijkt me niet dat dit 'AND' is ?
Uit de help:
code:
1
2
3
4
5
6
7
8
Logical (bitwise) operators 
Operator    Operation   Operand types   Result type Examples
not bitwise negation    integer integer not X
and bitwise and integer integer X and Y
or  bitwise or  integer integer X or Y
xor bitwise xor integer integer X xor Y
shl bitwise shift left  integer integer X shl 2
shr bitwise shift right integer integer Y shr I

[ Voor 10% gewijzigd door Verwijderd op 10-01-2006 12:10 ]


  • Bint
  • Registratie: Juli 2002
  • Laatst online: 18-04 14:22
maui, bedankt voor de hulp, nu werkt het!

In C werkte dat wel gewoon zo ;)

Memories of yesterday, will grow, but never die


  • Bint
  • Registratie: Juli 2002
  • Laatst online: 18-04 14:22
oh nog een vraagje

is & en && in C gewoon hetzelfde als
AND in delphi?

Memories of yesterday, will grow, but never die


Verwijderd

Bintje schreef op dinsdag 10 januari 2006 @ 12:13:
oh nog een vraagje

is & en && in C gewoon hetzelfde als
AND in delphi?
ja (vermoed ik, heb sinds de HTS geen C/C++ meer gedaan)

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-04 11:08

.oisyn

Moderator Devschuur®

Demotivational Speaker

Nogmaals, je stelt allemaal vragen die je gewoon in de documentatie kunt lezen. Ik zou je willen verzoeken voortaan zelf wat meer moeite te doen door zelf die documentatie door te bladeren.

Een & is in C een bitwise and, terwijl && een logical and is. De eerste combineert dus alle bits van beide operanden, terwijl die laatste checkt of beide operanden true zijn. In C is het ook nog eens zo dat je variabelen automatisch geconvert worden naar een 'boolean', wat simpelweg betekent dat ze true zijn als ze ongelijk zijn aan 0. De && geeft dus true (1) als beide operanden ongelijk zijn aan 0.

if (a & b) in C kun je in Delphi dus noteren als if ((a and b) <> 0)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 21:21

Tomatoman

Fulltime prutser

.oisyn schreef op dinsdag 10 januari 2006 @ 12:40:
[...]if (a & b) in C kun je in Delphi dus noteren als if ((a and b) <> 0)
En aangezien je bij om if statement geen haakjes hoeft te zetten kun je het ook schrijven als
if (a and b) <> 0 then ...

Een goede grap mag vrienden kosten.


  • Depress
  • Registratie: Mei 2005
  • Laatst online: 16-04 12:04
@tomatoman
Das niet volledig waar.
code:
1
2
3
4
5
6
7
8
9
10
11
//dit kan niet
if Check = True AND FirstPass = False Then
begin
//bla
end;

//dat moet dit zijn:
if (Check = True) AND (FirstPass = False) Then
begin
//bla
end;

  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 21:21

Tomatoman

Fulltime prutser

Depress schreef op dinsdag 10 januari 2006 @ 19:31:
@tomatoman
Das niet volledig waar.
code:
1
2
3
4
5
6
7
8
9
10
11
//dit kan niet
if Check = True AND FirstPass = False Then
begin
//bla
end;

//dat moet dit zijn:
if (Check = True) AND (FirstPass = False) Then
begin
//bla
end;
Wat ik bedoel is dat je niet
if (Statement) then ...
hoeft te typen, maar dat het gewoon
if Statement then ...
mag zijn. Vertaald naar jouw voorbeeld: het hoeft dus niet
if ((Check = True) AND (FirstPass = False)) then
te zijn. Overigens valt het voorbeeld veel eenvoudiger te formuleren:
Delphi:
1
2
if Check and not FirstPass then
   ...

Een goede grap mag vrienden kosten.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-04 11:08

.oisyn

Moderator Devschuur®

Demotivational Speaker

Je bedoelt Expression ipv Statement ;)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 21:21

Tomatoman

Fulltime prutser

Klopt :o

Een goede grap mag vrienden kosten.


  • Rum
  • Registratie: Augustus 2002
  • Laatst online: 07-03 13:06

Rum

van je if-statement klopt weinig:
code:
1
if(((foo1 AND $08) or (foo2 AND $04)) and ((foo3 < 3) OR unstrict)) then

"foo1 AND $08" en "foo2 AND $08" leveren geen true/false op.

De error die je krijgt wordt veroorzaakt op het punt van de "and". Dat komt doordat het statement daarvoor niet klopt. Ik weet niet wat je precies wilt, maar ik denk zelf dat je dit bedoelt:

code:
1
if(((foo1 AND $08=$08) or (foo2 AND $04=$04)) and ((foo3 < 3) OR unstrict)) then


Dat is in ieder geval qua syntax weer juist!

Verwijderd

Rum schreef op woensdag 11 januari 2006 @ 14:44:
van je if-statement klopt weinig:
code:
1
if(((foo1 AND $08) or (foo2 AND $04)) and ((foo3 < 3) OR unstrict)) then

"foo1 AND $08" en "foo2 AND $08" leveren geen true/false op.

De error die je krijgt wordt veroorzaakt op het punt van de "and". Dat komt doordat het statement daarvoor niet klopt. Ik weet niet wat je precies wilt, maar ik denk zelf dat je dit bedoelt:

code:
1
if(((foo1 AND $08=$08) or (foo2 AND $04=$04)) and ((foo3 < 3) OR unstrict)) then


Dat is in ieder geval qua syntax weer juist!
Waren we dacht ik al achter ;)

  • Bint
  • Registratie: Juli 2002
  • Laatst online: 18-04 14:22
hulde aan maui71 ;)

wat is het toch handig als iemand een klein hintje geeft. ;)

Memories of yesterday, will grow, but never die

Pagina: 1