我在标题" 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中指定默认值,但我不想这样做,我只想用我标题中的函数分配它们。
答案 0 :(得分:5)
您可以将结构定义移动到头文件中:
#ifndef POINT_H_INCLUDED
#define POINT_H_INCLUDED
struct Point {
int x;
int y;
};
struct Point* createDefaultValues();
#endif // POINT_H_INCLUDED
并在point.c中包含头文件
答案 1 :(得分:1)
另一种方法是编写两个访问器函数,因此您可以通过它们获取成员的值而不是引用指针。这种方法可能更好,因为它不会强迫您将struct定义放入公共视图。
为此,您可以添加到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函数,例如验证等。