Re: Race/Class Snippet

From: Patrick Dughi (dughi@imaxx.net)
Date: 11/09/00


> I am trying to install the race/class snippet and I am getting undeclared ch
> errors in this code.
>
> void display_classes(struct descriptor_data *d) {
>   int x;
>
>   send_to_char("Class selection menu - please choose a
> class\r\n---------------
> -----\r\n", d->character);
>   for (x = 0; x < NUM_CLASSES; x++)
>     if (class_ok_race[(int)GET_RACE(ch)][x]])
>       send_to_char(class_display[x], d->character);
>       send_to_char("\nClass: ", d->character);
> }
>
> I cannot figure out why I am getting this error as GET_RACE(ch) is the
> variable not ch, When I added races I added
> #define GET_RACE(ch)    ((ch)->player.race)

        Okay. Given the code above, where do you define/declare the
variable 'ch' ?  I see you define 'x', and later on it's declared in the
'for' loop.  The first time you use ch, it's inside the macro.  What is
it? (hint, the descriptor_data structure has a member named 'character')

        As for the macro, thats nice if that variable it references also
exists.  However all a macro does is replace previously existing code. If
you see a macro;

#define MACRO(x) (x->member)

and you use it in code like this;

  if(MACRO(avariable))

it's replaced by the c preprocessor with;

  if(avariable->member)

        In your case, 'GET_RACE(x)' is simply replaced with
((x->player.race)). Pretty simple, and really, not about definition.

                        PjD


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



This archive was generated by hypermail 2b30 : 04/11/01 PDT