【问题标题】:error: unknown type name struct错误:未知类型名称结构
【发布时间】:2016-11-02 17:41:24
【问题描述】:

我正在尝试用 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;
    }
}

【问题讨论】:

  • 在 C 中不能省略 struct 关键字,matrix a[MAX][MAX] 应该是 struct matrix a[MAX][MAX](或使用 typedef
  • 或者定义应该是typedef struct matrix{ int Val, Next; } matrix;
  • 你不应该把函数实现放在 C 头文件中,只放在它们的原型中。包括实现也容易产生重复的定义,这是不允许的。

标签: c


【解决方案1】:

您定义了一个名为struct matrix 的结构。这与matrix 不同,因为结构定义必须以struct 关键字开头。

将您的函数定义更改为:

void intro_date(int nr_elem, struct matrix a[MAX][MAX])

此外,您不应将代码放入头文件中。只有类型定义和声明属于那里。如果有多个源文件包含此标头,则为每个源文件创建的目标文件将包含函数intro_date() 的副本。在尝试链接这些文件时,您会收到一条错误消息,指出 intro_date() 已重新定义。

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

【讨论】:

    【解决方案2】:

    结构声明上的 Typedef 其“新名称”。

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

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

    struct matrix a[MAX][MAX];
    

    【讨论】:

      【解决方案3】:

      而不是

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

      使用

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

      【讨论】:

        【解决方案4】:

        在此之前使用结构关键字。

        对于 C 编译器,您必须使用 struct 关键字,而在 C++ 中,struct 关键字是可选的。 对于 C 中的 Ease,您可以 typedef 它。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-10-09
          • 2012-02-20
          • 2016-06-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多