C 错误:未知的类型名结构

C 错误:未知的类型名结构,c,C,我正在尝试用C语言解决康威的《生活游戏》。我编写了一个包含所有函数的.h文件,但在头文件中收到以下错误: 错误:未知类型名称“矩阵” 这是头文件的开头,其中包含我的结构声明和第一个函数: #include<stdio.h> #include<string.h> #define MAX 1000 struct matrix{ int Val, Next; }; void intro_date(int nr_elem, matrix a[MAX][MAX]){

我正在尝试用C语言解决康威的《生活游戏》。我编写了一个包含所有函数的.h文件,但在头文件中收到以下错误: 错误:未知类型名称“矩阵”

这是头文件的开头,其中包含我的结构声明和第一个函数:

#include<stdio.h>
#include<string.h>
#define MAX 1000
struct matrix{
    int Val, Next;
};
void intro_date(int nr_elem, matrix a[MAX][MAX]){
    int x,y;
    printf("Enter the line and the column of the element which you wish to read within the matrix: \n");
    while(nr_elem){
        scanf("%d%d",&x,&y);
        a[x][y].Val=1;
        --nr_elem;
    }
}
#包括
#包括
#定义最大1000
结构矩阵{
int Val,下一个;
};
无效介绍日期(整数元素,矩阵a[MAX][MAX]){
int x,y;
printf(“在矩阵中输入要读取的元素的行和列:\n”);
while(nr_elem){
scanf(“%d%d”,&x,&y);
a[x][y].Val=1;
--努埃伦;
}
}

结构声明上的Typedef是它的“新名称”

或者在创建新实例时明确指定它是struct:

struct matrix a[MAX][MAX];

结构声明上的Typedef将显示其“新名称”

或者在创建新实例时明确指定它是struct:

struct matrix a[MAX][MAX];
而不是

    void intro_date(int nr_elem, matrix a[MAX][MAX]){
使用

而不是

    void intro_date(int nr_elem, matrix a[MAX][MAX]){
使用


您定义了一个名为
struct matrix
的结构。这与
矩阵
不同,因为结构定义必须在
结构
关键字之前

将函数定义更改为:

void intro_date(int nr_elem, struct matrix a[MAX][MAX])
此外,不应将代码放入头文件中。只有类型定义和声明属于这里。如果要包含多个源文件,则为每个源文件创建的对象文件将包含函数
intro\u date()
。尝试链接这些文件时,会出现一个错误,说明重新定义了
intro\u date()


intro_date
的定义应该存在于一个源文件中。然后标题将只包含声明。

您定义了一个名为
struct matrix
的结构。这与
矩阵
不同,因为结构定义必须在
结构
关键字之前

将函数定义更改为:

void intro_date(int nr_elem, struct matrix a[MAX][MAX])
此外,不应将代码放入头文件中。只有类型定义和声明属于这里。如果有多个源文件包含此头文件,则为每个头文件创建的目标文件将包含函数
intro\u date()
的副本。尝试链接这些文件时,会出现一个错误,说明重新定义了
intro\u date()


intro_date
的定义应该存在于一个源文件中。然后标题将只包含声明。

在声明之前使用Struct关键字

<>对于C编译器,你必须使用用户结构关键字,而C++中,Strut关键字是可选的。 为了便于在C中使用,您可以键入def

typedef struct _matrix{
    int Val, Next;
}matrix;

在此之前使用Struct关键字

<>对于C编译器,你必须使用用户结构关键字,而C++中,Strut关键字是可选的。 为了便于在C中使用,您可以键入def

typedef struct _matrix{
    int Val, Next;
}matrix;

在C语言中,你不能使用
struct
关键字,
matrix a[MAX][MAX]
应该是
struct matrix a[MAX][MAX]
(或者使用
typedef
),这里解释如下:或者定义应该是
typedef struct matrix{int Val,Next;}matrix。不应将函数实现放在C头文件中,而应放在它们的原型中。包括实现也会产生重复的定义,这是不允许的。在C语言中,不能使用
struct
关键字,
matrix a[MAX][MAX]
应该是
struct matrix a[MAX][MAX]
(或者使用
typedef
),这里解释了:或者定义应该是
typedef struct matrix{int Val,Next;}matrix;
。不应该将函数实现放在C头文件中,而应该放在它们的原型中。包括实现也会产生重复的定义,这是不允许的。