变量声明为从未完成的类型

时间:2017-05-14 12:27:46

标签: c arm keil

我有三个文件

  • 的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”

我错过了什么?

1 个答案:

答案 0 :(得分:2)

您无法像这样声明testStruct,myStruct_type是一个不完整的类型。你最多只能声明一个指针。

所以改变

myStruct_type testStruct;

myStruct_type *testStruct;

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