#ifndef TEST_H_
#define TEST_H_
typedef struct point point;
#endif /* TEST_H_ */
和c档
#include "test.h"
struct point
{
void *data;
};
当我试图在main.c中创建一个点结构实例
static point objpoint;
main()
{
}
编译器收到此错误 描述资源路径位置类型
BTW,如果我定义了一个指向结构的指针,如
static point *ppoint;
编译器不会生成任何错误
另外,我需要避免对struct对象进行动态分配的一个更重要的信息
请告知。
答案 0 :(得分:2)
您只能使用前向声明创建struct point
类型的对象。
您需要添加函数来构造struct point
的实例并操纵其数据。在这些函数中,只处理指针。
在.h文件中添加声明:
#ifndef TEST_H_
#define TEST_H_
typedef struct point point;
point* constructPoint();
void setX(point* p, int x);
void setY(point* p, int y);
int getX(point* p);
int getY(point* p);
#endif /* TEST_H_ */
定义{。1}}和.c文件中的函数:
struct
使用这些函数在main.c中构造和操作对象:
#include "test.h"
struct point
{
int x;
int y;
};
point* constructPoint()
{
return calloc(1, sizeof(point));
}
void setX(point* p, int x)
{
p->x = x;
}
void setY(point* p, int y)
{
p->y = x;
}
int getX(point* p)
{
return p->x;
}
int getY(point* p)
{
return p->y;
}
答案 1 :(得分:0)
嗯,你已经回答了你的问题。如果您试图将结构成员隐藏在其他代码中,则必须使用指针。
问题是,当编译器遇到代码中的这一行时:
static point objpoint;
它需要知道为它分配多少空间,并且需要知道结构的数据成员是什么。因此,必须在代码中完全定义所有字段及其类型。
如果要隐藏结构的数据成员。您需要定义一个返回指向结构的指针的创建函数(如另一个答案中所述)。并且只在其他地方使用指向你的结构的指针。
您可以静态分配结构,但仅限于定义结构的文件。然后,您可以返回指向该变量的指针,而不是分配新的变量。但是你仍然需要在其他地方使用指针引用该结构。