【发布时间】:2017-05-14 12:27:46
【问题描述】:
我有三个文件
- main.c
- myStruct.h
- myStruct.c
我读了一些关于在哪里定义结构和封装的帖子,我想在头文件中声明我的结构并在源文件中定义它。
这是我测试过的。
myStruct.h
// myStruct.h
#include "stdint.h"
typedef struct myStruct myStruct_type;
myStruct.c
// myStruct.c
#include "myStruct.h"
struct myStruct {
uint32_t itemA;
uint32_t itemB;
uint32_t *pointerA;
uint32_t *pointerB;
};
main.c
// main.c
#include "myStruct.h"
myStruct_type testStruct; // This is where I get the error message
int main (void) {
while (1);
return 0;
}
当我尝试编译 (Keil uVision) 时,我收到以下错误“变量 'testStruct' 被声明为从未完成的类型 myStruct_type testStruct”
我错过了什么?
【问题讨论】:
-
结构定义需要在每个需要的地方都可见。将其从 c 文件移动到 h 文件。
-
将
struct myStruct移动到头文件中。否则它对 main.c 不可见 -
或者将
myStruct_type * new_myStruct_type(void){ return malloc(sizeof (myStruct_type)); }之类的内容放入myStruct.c并在main()中定义myStruct_type * pmyStruct = new_myStruct_type();。 -
另外你应该使用尖括号作为标准包含,以防本地搜索路径上碰巧有同名文件