Sto scrivendo un colpo di testa, timedate.h, che inizia come segue:dereferenziazione puntatore al tipo incompleto quando time.h intestazione è già inclusa
#ifndef _TIMEDATE_H_
#define _TIMEDATE_H_
int timetounixtime(int year, int month, int day, int hour, int minute, int second)
{
struct tm *time;
time->tm_year = year;
time->tm_mon = month;
time->tm_mday = day;
time->tm_hour = hour;
time->tm_min = minute;
time->tm_sec = second;
return mktime(time);
}
/*...*/
#endif
E viene poi incluso in uno dei miei .c principale i file come segue:
#include <stdio.h>
#include <string.h>
#include <sys/time.h>
#include "timedate.h"
int main(int argv, char **argc)
{
/*...*/
}
mi sembra che questo dovrebbe funzionare dal time.h è incluso nel codice principale prima timedate.h è chiamato. Tuttavia, quando faccio, ottengo i seguenti errori:
XXXXXXXXXX$ make
gcc file2nav.c -o file2nav
In file included from file2nav.c:4:0:
timedate.h: In function ‘timetounixtime’:
timedate.h:10:7: error: dereferencing pointer to incomplete type
timedate.h:11:7: error: dereferencing pointer to incomplete type
timedate.h:12:7: error: dereferencing pointer to incomplete type
timedate.h:13:7: error: dereferencing pointer to incomplete type
timedate.h:14:7: error: dereferencing pointer to incomplete type
timedate.h:15:7: error: dereferencing pointer to incomplete type
Potete aiutarmi a capire cosa sta succedendo? Prendo atto che se ho #include <time.h>
in timedate.h, l'errore scompare ... Ma perché? È già incluso in file2nav.c.
Non è un compilatore di backtracking. Basta includere i file effettivamente necessari nell'intestazione. Affidarsi a includere l'ordine è un'idea orribile. –
I file di intestazione sono per la dichiarazione di funzione e non la definizione di funzione. Pensa solo cosa succederebbe se tu avessi incluso quel file due volte. – mohit
@EdS., Sono confuso sul motivo per cui è necessario includere nel file di intestazione, ma non devi includere #include o qualsiasi altra delle solite intestazioni di libreria standard? –