Thank you, sir. In other compilers I was simply notified that the function was not defined. In the absence of a specific error message, I thought that CodeWarrior might scan the whole document rather than proceeding on a line by line basis.
----- Original Message ----- From: "Donald C. Kirker" <[EMAIL PROTECTED]> Newsgroups: palm-dev-forum To: "Palm Developer Forum" <[email protected]> Sent: Thursday, October 20, 2005 8:58 PM Subject: Re: Error Message After Function Call > Try this: > > /********************************************************************* > * Global variables > *********************************************************************/ > typedef struct { > char FirstName[20]; > char LastName[20]; > char PhoneNum[20]; > } TransStruct; > typedef TransStruct TransStructType; > typedef TransStruct* TransStructPtr; > > DmOpenRef gTransformer; > > Err OpenOrCreateDB(DmOpenRef *dbP, UInt32 type, UInt32 creator, UInt16 mode, > UInt16 cardNo, char* name, Boolean* created); > > static Err AppStart(void) > { > UInt16 mode = dmModeReadWrite; > Err err = errNone; > TransStruct *c; > Boolean created; > Char* DBName = (Char*) MemPtrNew(15); // allocate 15 bytes > DBName = "Transformers"; > > //Find the Transformer Database. If it doesn't exist, create it. > > OpenOrCreateDB(&gTransformer, 'DATA', '!!$g', mode, 0, DBName, &created); > > return err; > } > > > //NEW CODE!!! > //Open a database. If it doesn't exist, create it. > > Err OpenOrCreateDB(DmOpenRef *dbP, UInt32 type, UInt32 creator, UInt16 mode, > UInt16 cardNo, char* name, Boolean* created) > { > Err err = errNone; > *created = false; > *dbP = DmOpenDatabaseByTypeCreator(type, creator, mode); > if (!*dbP) > { > err = DmGetLastErr(); > if (err==dmErrCantFind) > err = DmCreateDatabase(cardNo, name, creator, type, false); > if (err != errNone) > return err; > *created = true; > *dbP = DmOpenDatabaseByTypeCreator(type, creator, mode); > if (! *dbP) > return DmGetLastErr(); > } > return err; > } > > > What is happing is that you are using OpenOrCreateDB before it is actually > being defined and the compiler doesn't know what it will return or its > parameters, so it assumes that they are "int" by default. Once you define > the function and it does not return as "int" the compiler complains. > > I would actually put "extern Err OpenOrCreateDB(DmOpenRef *dbP, UInt32 type, > UInt32 creator, UInt16 mode, UInt16 cardNo, char* name, Boolean* created);" > in a header file included at the top of the source file that uses that > function. > > -Donald > > "Del Ventruella" <[EMAIL PROTECTED]> wrote in message > news:[EMAIL PROTECTED] > > I am trying to call a function. It is passing a number of variables > relevant to calling a database. I define the function, per a text I have. > I call the function. CodeWarrior informs me: > > > > Error : identifier 'OpenOrCreateDB(...)' redeclared > > was declared as: 'int (...)' > > now declared as: 'unsigned short (void **, unsigned long, unsigned long, > unsigned short, unsigned short, char *, unsigned char *)' > > > > > > THE CALLING FUNCTION FOLLOWS (THE CALL IS MADE ONE LINE UP FROM LAST CODE > LINE): > > > > > > > > static Err AppStart(void) > > { > > UInt16 mode = dmModeReadWrite; > > Err err = errNone; > > TransStruct *c; > > Boolean created; > > Char* DBName = (Char*) MemPtrNew(15); // allocate 15 bytes > > DBName = "Transformers"; > > > > //Find the Transformer Database. If it doesn't exist, create it. > > > > OpenOrCreateDB(&gTransformer, 'DATA', '!!$g', mode, 0, DBName, &created); > > > > return err; > > } > > > > > > THE FUNCTION THAT IS CALLED IS: > > > > > > > > //NEW CODE!!! > > //Open a database. If it doesn't exist, create it. > > > > Err OpenOrCreateDB(DmOpenRef *dbP, UInt32 type, UInt32 creator, UInt16 > mode, UInt16 cardNo, char* name, Boolean* created) > > { > > Err err = errNone; > > *created = false; > > *dbP = DmOpenDatabaseByTypeCreator(type, creator, mode); > > if (!*dbP) > > { > > err = DmGetLastErr(); > > if (err==dmErrCantFind) > > err = DmCreateDatabase(cardNo, name, creator, type, false); > > if (err != errNone) > > return err; > > *created = true; > > *dbP = DmOpenDatabaseByTypeCreator(type, creator, mode); > > if (! *dbP) > > return DmGetLastErr(); > > } > > return err; > > } > > > > > > Have any data types or representations of data types that were legal a few > years ago when the code from which I am borrowing was written ceased to be > allowed? There are a series of additional messages after the error that > begins this post asserting that variable names are not defined. > > > > undefined identifier 'created' > > undefined identifier 'dbP' > > undefined identifier 'cardNo' > > > > I create the following as global variables: > > > > /********************************************************************* > > * Global variables > > *********************************************************************/ > > typedef struct { > > char FirstName[20]; > > char LastName[20]; > > char PhoneNum[20]; > > } TransStruct; > > typedef TransStruct TransStructType; > > typedef TransStruct* TransStructPtr; > > > > DmOpenRef gTransformer; > > > > > > ANYONE WHO CAN CLEAR THE BASIS FOR THIS ERROR SEQUENCE UP FOR ME WOULD BE > PROVIDING A GREAT FAVOR. I HAVE PROBABLY FAILED TO PROPERLY DEFINE A > VARIABLE TYPE, BUT SIMPLY DON'T SEE WHERE. > > THANK YOU. > > > > > > -- > For information on using the PalmSource Developer Forums, or to unsubscribe, please see http://www.palmos.com/dev/support/forums/ > -- For information on using the PalmSource Developer Forums, or to unsubscribe, please see http://www.palmos.com/dev/support/forums/
