Re: previous declaration of Table was here / conflicting types for
- From: "Michael.Zhang" <zhangqiuyuan@xxxxxxxxx>
- Date: Fri, 9 May 2008 02:40:34 -0700 (PDT)
[snip: On May 6, 3:32 am, Ben Bacarisse <ben.use...@xxxxxxxxx> wrote:
"Michael.Z" <zhangqiuy...@xxxxxxxxx> writes:
The Table.c was required to be implemented as generic type. If I am
right, Table is declared as void * in header file, the reason is that,
when used later on, it can be casted to any other type of pointers.
The implementation of Table in Table.c was defined as pointer to]
struct Table, because I need to implement the members of Table.
My professor told us, void * in header indicates a generic type.
He has some sample codes where List wastypedef'd void pointer but the
definition was struct List Pointer:
First, the more common way to "hide the implementation" is simply to
declare your functions as using a 'struct Table *' (as has already
been explained by Flash Gordon).
Secondly, this does not stop you writing generic functions that have a
'void *' parameter. You can pass a 'struct Table *' where a 'void *'
is expected when is important to do so.
I just want to make sure I got you right.You are suggesting:
typedef struct Table{ ...} Table;
Table * makeTable( void* size, void * data);
There is no obvious advantage to making the Table generic (in that
sense) rather than simply hidden. In fact there is a positive
*disadvantage* to doing that -- you loose all the type-checking. It
I don't quit understand this part.
"generic(in that sense)": refers to what I said about my professors
way.
vs
"simply hidden": the above example. Table * makeTable( void* size,
void * data);
is usually much better to stick with hidden (incomplete) struct
pointers right up to the point where you are *forced* to start using
'void *'.
an example of being *forced* would be:
void useTable(*void myTable){
Table * makeTable = (Table *)myTable;
}
if my example is not right, any chance you can give me correct one?
Your professor may have a reason for doing this, but it does seem like
a wise choice from the sample you posted.
--
Ben.
"
.
- Follow-Ups:
- Re: previous declaration of Table was here / conflicting types for
- From: Chris Torek
- Re: previous declaration of Table was here / conflicting types for
- From: Ben Bacarisse
- Re: previous declaration of Table was here / conflicting types for
- References:
- previous declaration of Table was here / conflicting types for
- From: Michael.Z
- Re: previous declaration of Table was here / conflicting types for
- From: Flash Gordon
- Re: previous declaration of Table was here / conflicting types for
- From: Michael.Z
- Re: previous declaration of Table was here / conflicting types for
- From: Ben Bacarisse
- previous declaration of Table was here / conflicting types for
- Prev by Date: Re: Handling 'initializer element not constant' error
- Next by Date: Re: lcc first experience
- Previous by thread: Re: previous declaration of Table was here / conflicting types for
- Next by thread: Re: previous declaration of Table was here / conflicting types for
- Index(es):
Relevant Pages
|