繁体   English   中英

使用结构取消引用不完整类型的指针

[英]Dereferencing pointer to incomplete type using a struct

我在标题“ point.h”中具有以下代码:

#ifndef POINT_H_INCLUDED
#define POINT_H_INCLUDED

struct Point* createDefaultValues();

#endif // POINT_H_INCLUDED

point.c文件具有以下代码:

#include <stdlib.h>
struct Point {
int x;
int y;
};


struct Point* createDefaultValues()
{
    struct Point* point;
    point = (struct Point*) malloc(sizeof(struct Point));
    point->x = 2;
    point->y = 1;
    return point;
};

main.c由以下几行组成:

#include <stdio.h>
#include <stdlib.h>
#include "point.h"

int main()
{
    struct Point* cerc;
    cerc = createDefaultValues();
    printf("%d, %d", cerc->x, cerc->y);
    return 0;
}

我在printf()行中将指针指向不完整的类型错误。 我应该怎么修理?

我知道我可以在struct中分配默认值,但是我不想这样做,我只想使用在标头中找到的函数来分配它们。

您可以将结构定义移到头文件中:

 #ifndef POINT_H_INCLUDED
 #define POINT_H_INCLUDED

    struct Point {
      int x;
      int y;
    };


    struct Point* createDefaultValues();

    #endif // POINT_H_INCLUDED

并在point.c中包含头文件

另一种方法是编写两个访问器函数,因此您可以通过它们获取成员的值,而不是延迟指针。 这种方法可能更好,因为它不会强迫您将结构定义放到公众视野中。

为此,您可以添加intto point.h

int getX(struct Point* point);
int getY(struct Point* point);

定义进入point.c

int getX(struct Point* point)
{
    return point->x;
}

int getY(struct Point* point)
{
    return point->y;
}

并在main.c中将其替换为:

printf("%d, %d", getX(cerc), getY(cerc));

通过扩展它,您可以编写带有验证等功能的setter函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM