首页 > 解决方案 > c中的类型声明和声明结构

问题描述

我在名为的头文件中有以下内容vector.h

typedef struct coordinates coordinates;

坐标结构应该有两个变量。xy

如何在不更改头文件中的任何内容的情况下x包含这两个变量?y

我的想法是写以下内容main.c

coordinates{
int x;
int y;
};

我在上面写是因为我已经typedef struct coordinates在vector.h中写了一个。所以,如果我再写一次,它就会重复。但是上面的语法本身是错误的,因为编译器会抛出错误。如果我理解结构错误或帮助我如何在结构中声明变量,请帮助我。

标签: cstructdeclarationtypedefdefinition

解决方案


我在名为 vector.h 的头文件中有以下内容

typedef struct coordinates coordinates;

这是将标识符声明coordinates为 type 的别名,struct coordinates就该声明而言,它本身就是“不完整类型”。

如何在不更改头文件中的任何内容的情况下包含这两个变量 x 和 y?

struct coordinates您可以访问成员之前,需要使用定义“完成”:

struct coordinates {
    int x;
    int y;
};

struct coordinates无论您访问该类型实例的成员,无论是通过类型名称还是通过其别名,此类定义都需要在范围内coordinates。通常将这样的定义放在头文件中,以便在翻译单元之间适当共享,但如果您只需要访问一个文件中的成员(或结构的整体大小),那么您可以改为放置上面的类型定义仅在该文件中。或者,您可以在每个想要访问成员的翻译单元中复制相同的定义,但这种形式很差并且难以维护。


推荐阅读