Re: [CODE][WIN95][MSVC5] A compiling error concerning L-values ...

From: Lubos Lunak (l.lunak@sh.cvut.cz)
Date: 12/01/98


Dne Út, 01 prosinec 1998 jste napsal(a):
>Hello everybody ,
>
>I've just got a code of a certain MUD (CircleMUD based) , and I've been
>trying to compile it under my WIN95 MSVC5 system.
>
>It gives me this strange compiler error :
>
>error C2106: "-="  : left operand must be l-value
>
>in this line  : GET_MANA(ch) -= 200;
>
>these kind of l-value errors accur during the whole compilation not only
>
>concerning the GET_MANA() macro.
>
>I checked out the GET_MANA macro and found this :
>
>#define GET_MANA(ch)   (!IS_NPC(ch) ?
>                            ((ch)->player_specials->linking[0] ? \
>                             (ch)->player_specials->manalinked : \
>                             (ch)->points.mana): (ch)->points.mana)
>
>you see , all the l-value errors in the compilation is due to the
>? : statements , but the MSVC tells me that a ? : statement can
>be an l-vlaue.
>
>So , I don't know what is the problem : is the ? : statement incorrect ,
>
>is anything missing in the definition of the macro ? WHAT ??????
>
>I hope you guys could help me with it ...
>
>Yohay Etsion
>yohay_e@netvision.net.il

 Reminds me of the CHECK_PLAYER_SPECIALS() macro.
 Instead of "( (a) ? (b) : (c) )" use "( *( (a) ? &(b) : &(c) ))", i.e.
#define GET_MANA(ch)   (*(!IS_NPC(ch) ?
                            ((ch)->player_specials->linking[0] ? \
                             &((ch)->player_specials->manalinked) : \
                             &((ch)->points.mana)): &((ch)->points.mana)))
 Uhm, hopefully it's correct ( copy&paste in KMail ).

  L.Lunak
  l.lunak@email.cz


     +------------------------------------------------------------+
     | Ensure that you have read the CircleMUD Mailing List FAQ:  |
     | http://democracy.queensu.ca/~fletcher/Circle/list-faq.html |
     +------------------------------------------------------------+



This archive was generated by hypermail 2b30 : 12/15/00 PST