我有三份文件
主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;
};

主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声明的”
我错过了什么?

最佳答案

不能像那样声明testStruct,myStruct_type是不完整的类型。您最多可以声明一个指针。
所以改变

myStruct_type testStruct;

具有
myStruct_type *testStruct;

您可以这样想,当编译器编译main.c时,它没有关于myStruct_type中成员的信息,因此无法计算结构的大小。

09-12 09:12