我想知道如何在它所在的文件之外使用typedef结构。我的意思是,我有这个:
在名为“rtc_i2c.c”的文件中我有------------------------------------
#include "rtc_i2c.h"
struct time_date_str
{
char year;
char month;
char date;
char day;
char hour;
char minute;
char second;
};
int RTCGetTime(TimeDate *timdatstrptr)
{
timdatstrptr -> second = 0x12;
return 0;
}
然后在一个名为“rtc_i2c.h”的文件中,我有-------------------------------
#ifndef RTC_I2C_H
#define RTC_I2C_H
typedef struct time_date_str TimeDate;
#endif
在“main.c”中我有-------------------------------------- -----------
#include "rtc_i2c.h"
TimeBase *TimeDateData;
void main(void)
{
char DateTimeASCII[20];
RTCGetTime(TimeDateData);
DateTimeASCII[0] = ????????
}
然后,当我进入我的代码时,我输入到RTCGetTime,在观察窗口中,我可以看到“timdatstrptr - > second = 12”分配正确执行。但问题出在外面。如果我将空间中的“TimeDateData - > second”放在????????中,编译器会生成错误。所以我不知道我应该如何通过指针访问全局定义的数组的内容。
如果我理解,声明为“TimeBase * TimeDateData”的指针指向我的数组并使用“ - >”进行访问因为是指针。我错了吗?这是怎么回事?
有人能帮帮我吗?谢谢!
答案 0 :(得分:3)
编译器不知道time_date_str
的详细信息。你有两个选择:
struct time_date_str
声明移至标题文件rtc_i2c.c
这一切归结为一个问题:外部实体是否应该知道有关此结构的详细信息?
还有其他问题,包括您将未初始化的指针传递给RTCGetTime
。
答案 1 :(得分:0)
您不应该在它所在的文件之外使用该结构,这就是它位于文件rtc_i2c.c
中而不是rtc_i2c.h
中的原因。尝试找到其他方法来完成你需要的东西。
例如,我猜RTCGetTime
的声明也出现在rtc_i2c.h
的某处,这就是为什么你可以在另一个文件(main.c
)中使用它。那么,在rtc_i2c.h
中寻找其他有用的功能,也许你可以使用一些东西?
如果你绝对不能这样做,只需将结构的定义移动到头文件:
#ifndef RTC_I2C_H
#define RTC_I2C_H
struct time_date_str
{
char year;
char month;
char date;
char day;
char hour;
char minute;
char second;
};
typedef struct time_date_str TimeDate;
#endif