该错误指的是是不完整的类型,一般出现在定义结构体指针类型声明的时候。真正出现的问题原因是这个结构体根本就没有定义,或者是定义的头文件并没有被正确引用进来。

想要解决该问题,有两种方法可供参考:

1.包含定义该结构体的头文件

2.如果结构定义在c文件中,而不是定义在h文件的话,建议将结构体定义在h文件中,然后再包含.h的这种做法

3.直接将该结构体拷贝到报错的文件中(不建议使用

例:

test3:
#include<stdio.h>

int main(int argc, char **argv)
{
    call_num();
}

test2:
#include <stdio.h>

void call_num()
{
    struct zt_t *p = get_num();

    p->x = 356;
    p->y = 325;

    show(p);
}

test1:
#include <stdio.h>

struct zt_t {
    int x;
    int y;
};

struct zt_t num;

struct zt_t * get_num()
{
    num.x = 123;
    num.y = 456;

    return &num;
}


void show(struct zt_t *buf)
{
    printf("%s %d %d %d \n",__func__,__LINE__ ,buf->x, buf->y);
}

编译结果如下:

 

修改如下所示:

test3:
#include<stdio.h>
#include "test.h"

int main(int argc, char **argv)
{
    call_num();
}


test2:
#include <stdio.h>
#include "test.h"

void call_num()
{
    struct zt_t *p = get_num();

    p->x = 356;
    p->y = 325;

    show(p);
}

test1:
#include <stdio.h>
#include "test.h"


struct zt_t num;

struct zt_t * get_num()
{
    num.x = 123;
    num.y = 456;

    return &num;
}


void show(struct zt_t *buf)
{
    printf("%s %d %d %d \n",__func__,__LINE__ ,buf->x, buf->y);
}


test.h
#ifndef __TEST_H__
#define __TEST_H__

struct zt_t {
    int x;
    int y;
};
struct zt_t * get_num();

#endif

编译结果如下所示:

 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐