Hi Jeff,

Thanks. Yes, that makes sense. What was puzzling me though was why I could (Char*) it away, but not (char*) it away.

Bob.

Jeffry Loucks wrote:

CtlGetLabel() is defined as returning (const char *). The compiler will
complain that you are assigning a (const char *) to a (char *). The 'const'
keyword is the issue. The 'const' tells the compiler to treat the value as
non-writeable, in this case the data the returned pointer points to. AFAIK,
you can (cast) away any declaration.

const char *p = char *                  // okay - the compiler can accept
writeable as non-writeable
char *p = const char *                  // not okay - the compiler cannot
accept non-writeable as writeable
char *p = (char*) const char *  // okay - you are overriding the compiler
with the cast

--------------------
Jeff Loucks
Work 425-284-1128 [EMAIL PROTECTED]
Home 253-851-8908 [EMAIL PROTECTED]
Mobile 253-691-8812


-----Original Message-----
From: Robert Moynihan [mailto:[EMAIL PROTECTED] Sent: Thursday, January 06, 2005 7:14 PM
To: Palm Developer Forum
Subject: Re: Debug app works, Release doesn't



Chris Tutty wrote:



From: "Robert Moynihan" <[EMAIL PROTECTED]>




(char*) s = CtlGetLabel(GetObjectPtr(ReadyButton));

... that might get rid of your error message, but might not solve the
problem that you are asking about.





How on earth is this going to make any difference? Aside from
the questionable approach of trying to eliminate a warning rather than fix the underlying problem, how would casting a variable
defined as char * to char * change anything.





Actually, I did make a mistake. I meant to write (Char*) instead of (char*). The docs say the prototype is...
const Char *CtlGetLabel(const ControlType *controlP)
... so I gave a try casting it exactly as the prototype and it eliminated the error message.


I didn't know WHY it worked, so, not understanding all the mysteries of compilers, I then went on to see if I could figure out what was happening. I originally thought that Char* and char* were the same, and the ONLY thing that I changed between the 6 trials was the case of the 'c' in the declaration and cast:

All 4 of these give the warning message:
   char        *s;
   s=CtlGetLabel(GetObjectPointer(DBTypeTriggerID));

   Char        *s;
   s=CtlGetLabel(GetObjectPointer(DBTypeTriggerID));

   char        *s;
   (char*) s=CtlGetLabel(GetObjectPointer(DBTypeTriggerID));

   Char        *s;
   (Char*) s=CtlGetLabel(GetObjectPointer(DBTypeTriggerID));

These 2 don't:
   char        *s;
   (Char*) s=CtlGetLabel(GetObjectPointer(DBTypeTriggerID));

   Char        *s;
   (char*) s=CtlGetLabel(GetObjectPointer(DBTypeTriggerID));

This all feels very odd to me.  I wish I understood it better.

Bob.





--
For information on using the Palm Developer Forums, or to unsubscribe, please 
see http://www.palmos.com/dev/support/forums/

Reply via email to