C++中出现‘incomplete type is not allowed’错误的原因是什么?
错误原因分析
出现incomplete type in not allowed错误的核心原因是结构体类型的使用方式不匹配:
- 你通过
typedef struct {...} SqBiTree;将匿名结构体定义了一个类型别名SqBiTree,这个别名直接就是完整的类型名,不需要再用struct前缀修饰。 - 但你的函数返回类型写的是
struct SqBiTree*,编译器会认为struct SqBiTree是一个从未定义过的结构体类型,属于“不完整类型”,因此抛出错误。
另外还有两个需要注意的细节:
- 调用
malloc需要包含头文件#include <stdlib.h>,否则可能出现隐式声明的警告或错误。 - 你当前的
createTree函数只分配了内存,没有对结构体成员进行初始化(比如给ElemNum赋值、把数组内容复制到SqBiTNode),这会导致后续使用结构体时出现未定义行为。
修正后的代码示例
#include <stdlib.h> #define MAX_SIZE 100 typedef struct { int SqBiTNode[MAX_SIZE]; int ElemNum; }SqBiTree ; // 修正返回类型,去掉多余的struct前缀 SqBiTree* createTree(int array[], int N) { SqBiTree* tree = (SqBiTree*)malloc(sizeof(SqBiTree)); if (tree == NULL) { // 检查malloc是否成功 return NULL; } tree->ElemNum = N; // 复制数组内容到结构体数组(假设N不超过MAX_SIZE) for (int i = 0; i < N; i++) { tree->SqBiTNode[i] = array[i]; } return tree; }
内容的提问来源于stack exchange,提问作者Claire He
相关产品推荐
相关产品推荐

