我正在寫一個頭,timedate.h,它開始如下:提領指向不完全類型時time.h中頭已經包含
#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
,然後包括在我的主要.C之一文件如下:
#include <stdio.h>
#include <string.h>
#include <sys/time.h>
#include "timedate.h"
int main(int argv, char **argc)
{
/*...*/
}
在我看來,這應該工作,因爲time.h包含在timedate.h被調用之前的主代碼中。但是,當我製作時,出現以下錯誤:
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
你能幫我理解發生了什麼嗎?我注意到,如果我在timedate.h中使用#include <time.h>
,錯誤消失......但爲什麼?它已經包含在file2nav.c中。
這不是一個回溯編譯器。只需將您實際需要的文件包含在標題中即可。依靠包括命令是一個可怕的想法。 –
頭文件用於函數聲明而不是函數定義。 只要想想會發生什麼,如果你包含該文件兩次。 – mohit
@EdS。,我很困惑爲什麼你必須#include在頭文件中,但你不必#include 或任何其他常用的標準庫頭文件? –