取消引用指向不完整类型的指针 - 使用指向函数的指针将值赋给struct

时间:2017-04-14 17:01:12

标签: c pointers struct dereference

这是错误:

str.c: In function ‘values’: str.c:15:3: error: dereferencing pointer to incomplete type ‘struct inv’
     t -> a = &w;

这是代码:

#include<stdio.h>

void values(struct inv *t, int , float);

void main()
{
    struct inv {
        int a;
        float *p;
    } ptr;
    int z = 10;
    float x = 67.67;
    values(&ptr, z, x);
    printf("%d\n%.2f\n", ptr.a, *ptr.p);
}

void values(struct inv *t, int w , float b) {
    t -> a = &w; /* I am getting error here, not able to assign value 
                     using the arrow operator */
    t -> p = &b;
}

1 个答案:

答案 0 :(得分:2)

您在struct inv功能中定义了main。结果,它在main之外不可见。这意味着函数struct inv声明中提到的values是一个不同的结构,还有一个尚未完全定义的结构。这就是你得到“不完整类型”错误的原因。

您需要将定义移到函数之外。

此外,t->a的类型为int,但您要为其分配int *。在此处删除address-of运算符并直接指定w的值。

#include<stdio.h>

struct inv {
    int a;
    float *p;
};

void values(struct inv *t, int , float);

void main()
{
    struct inv ptr;
    int z = 10;
    float x = 67.67;
    values(&ptr, z, x);
    printf("%d\n%.2f\n", ptr.a, *ptr.p);
}

void values(struct inv *t, int w , float b) {
    t -> a = w; 
    t -> p = &b;
}