|
|
View previous topic :: View next topic |
Author |
Message |
rougie
Joined: 14 Jun 2006 Posts: 31
|
Typedefing a structure but get errors? |
Posted: Fri Aug 22, 2008 7:07 pm |
|
|
Hello,
Basically, here is what I have coded. I typedef a structure and create a global pointer of the that type (which is of the structure's type) and then when I want to create an object of that structure, I fecth a function which creates the object on the heap using malloc. The function accepts an object command parameter which tells how the logic in the function is to be executed. Basically the function either creates, modifies or frees the object's data. I have tried dozens of tests, but can't seem to find the source of the errors.
The errors that are generated are:
Line 10 (16,24) Unidefined identifier obj_DDLB
Line 13 ( 7,15) Unidefined identifier obj_DDLB
Line 14 (14,22) Unidefined identifier obj_DDLB
Line 18 (12,20) Unidefined identifier obj_DDLB
How can these errors be possible when "obj_DDLB" is declared globally?????
Thanking everyone in advance as all feedback and help is very, very
appreciated!
Here is the sample code:
=====================================ACM152.h
enum OBJECTTASK {e_CREATE=1, e_MODIFY, e_FREE};
=====================================ACM152.c
#include <ACM152.h>
#include <API_DDLB_LIB.h>
#include <API_DDLB_LIB.c>
void main()
{
obj_DDLB = ULC_DDLB_LIB_config_DDLB (e_CREATE, 0);
ULC_DDLB_LIB_do_DDLB(obj_DDLB);
ULC_DDLB_LIB_config_DDLB (e_FREE, 0);
}
==================================API_DDLB_LIB.h
typedef struct ddListBox{
long CURR_ICON_NUM;
} DDLB;
DDLB *obj_DDLB;
DDLB* ULC_DDLB_LIB_config_DDLB
( int OBJECT_CONTROL,
long CURR_ICON_NUM);
void ULC_DDLB_LIB_do_DDLB (DDLB *obj_DDLB);
=================================API_DDLB_LIB.c
DDLB* ULC_DDLB_LIB_config_DDLB( int OBJECT_CONTROL,
long CURR_ICON_NUM)
{
switch (OBJECT_CONTROL)
{
case e_CREATE:
obj_DDBL = (DDLB*) malloc (sizeof (struct ddListBox));
case e_MODIFY:
obj_DDBL->CURR_ICON_NUM= CURR_ICON_NUM;
return obj_DDBL;
break;
case e_FREE:
free(obj_DDBL);
break;
}
}
void ULC_DDLB_LIB_do_DDLB( DDLB *obj_DDLB)
{//NO CODE }
==============================================
--
Best regards
Robert |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Fri Aug 22, 2008 11:09 pm |
|
|
Can you post this as a little test program ? Add the lines for #include,
#fuses, etc. In other words, tack a new post onto this thread, in which
the above code is re-formatted into a small but complete program.
We should be able to copy and paste it into MPLAB, compile it, and
see those same error messages, with the same line numbers.
You need to make it easy for us to work on your problem.
When you post code, highlight all of it, and then punch the "Code"
button. Then preview it to make sure it looks good before you
submit it. A code block makes it easier for us to read it.
Also, tell us your compiler version. Many problems are version
dependent. |
|
|
Guest
|
|
Posted: Sat Aug 23, 2008 1:13 am |
|
|
Hello PCM, and thankyou for your reply, it is ery kind of you!
Here you go!
==================="ACM152.c" Program file
Code: |
#include <18f4685.h>
#device *=16
#device ADC=8
#device ICD=TRUE
#fuses HS,NOLVP,NOWDT,PUT
#use delay(clock=40M, oscillator=10M)
#fuses H4
//CCS LIBRARIES
#include <Dv4685.h> //DEVICE INNITIALIZATIONS
#include <stdlib.h> //CCS LIBRARY STANDARD LIBRARY
#include <stdlibm.h> //CCS LIBRARY (HEAP) MALLOC MODULE
#include <MATH.H> //CCS LIBRARY MATH MODULE
enum OBJECTTASK {e_CREATE=1, e_MODIFY, e_FREE};
typedef struct ddListBox{
long CURR_ICON_NUM;
} DDLB;
DDLB *obj_DDLB;
DDLB* ULC_DDLB_LIB_config_DDLB
(int OBJECT_CONTROL,
long CURR_ICON_NUM);
void ULC_DDLB_LIB_do_DDLB (DDLB *obj_DDLB);
void main()
{
obj_DDLB = ULC_DDLB_LIB_config_DDLB (e_CREATE, 0);
ULC_DDLB_LIB_do_DDLB(obj_DDLB);
ULC_DDLB_LIB_config_DDLB (e_FREE, 0);
}
DDLB* ULC_DDLB_LIB_config_DDLB
(int OBJECT_CONTROL, long CURR_ICON_NUM)
{
switch (OBJECT_CONTROL)
{
case e_CREATE:
obj_DDBL = (DDLB*) malloc (sizeof (struct ddListBox));
case e_MODIFY:
obj_DDBL->CURR_ICON_NUM = CURR_ICON_NUM;
return obj_DDBL;
break;
case e_FREE:
free(obj_DDBL);
break;
}
}
void ULC_DDLB_LIB_do_DDLB( DDLB *obj_DDLB)
{//NO CODE }
|
=========================================
Regards Robert |
|
|
RayJones
Joined: 20 Aug 2008 Posts: 30 Location: Melbourne, Australia
|
|
Posted: Sat Aug 23, 2008 3:58 am |
|
|
simple typo,
you declared DDLB* obj_DDLB;
you are de-referencing obj_DDBL
ie BL not LB
BTW, you also have:
void ULC_DDLB_LIB_do_DDLB( DDLB *obj_DDLB)
This is sure to cause YOU confusion having a local variable the same name as your global.... The compiler will be happily compile though.
Cheers, Ray |
|
|
Guest
|
Unbelievable but true! |
Posted: Sat Aug 23, 2008 10:33 am |
|
|
Hello Ray,
I can't believe it that I wasted all this time for a stupid typo!
I thankyou very much my freind, it is most appreciated.
You have no idea how much watering down I had to do from the original project code to find out that it should of been LB instead of BL!
Tanks again!
With sincere regards
Robert |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|