I don't understand why compiler is giving me error with this code
c, clang, gcc, linux, x86-64
Solution
Remove the `struct` keyword (it's not needed since you've already `typedef`ed the struct):
void startTimer( Timer* ptimer )
{
...
void stopTimer( Timer* ptimer )
{
...
Alternatively, remove the `typedef`:
struct Timer
{
struct timeval td_start;
struct timeval td_end;
};
void startTimer( struct Timer* ptimer )
{
...
void stopTimer( struct Timer* ptimer )
{
...
For more information, see Why should we typedef a struct so often in C?
Problem
I have the following C code, which looks very correct to me. However, the clang compiler (infact gcc or any other C compiler too) thinks otherwise. ``` typedef struct { struct timeval td_start; struct timeval td_end; } Timer; void startTimer( struct Timer* ptimer ) { gettimeofday( &(ptimer->td_start), NULL ); } void stopTimer( struct Timer* ptimer ) { gettimeofday( &(ptimer->td_end), NULL ); } ``` The compiler gives the following waring & error messages. Any idea what is wrong here? ``` ./timing.h:14:25: warning: declaration of 'struct Timer' will not be visible outside of this function [-Wvisibility] void startTimer( struct Timer* ptimer ) ^ ./timing.h:16:27: error: incomplete definition of type 'struct Timer' gettimeofday( &(ptimer->td_start), NULL ); ~~~~~~^ ./timing.h:14:25: note: forward declaration of 'struct Timer' void startTimer( struct Timer* ptimer ) ^ ./timing.h:19:24: warning: declaration of 'struct Timer' will not be visible outside of this function [-Wvisibility] void stopTimer( struct Timer* ptimer ) ^ ./timing.h:21:27: error: incomplete definition of type 'struct Timer' gettimeofday( &(ptimer->td_end), NULL ); ~~~~~~^ ./timing.h:19:24: note: forward declaration of 'struct Timer' void stopTimer( struct Timer* ptimer ) ```