错误:未知类型名称struct

时间:2016-11-02 17:41:24

标签: c

我试图在C中解决Conway的生命游戏。我写了一个包含我所有函数的.h文件,但是我在头文件中收到以下错误: 错误:未知类型名称"矩阵"

这是头文件的开头,它包含我的struct声明和第一个函数:

#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;
    }
}

4 个答案:

答案 0 :(得分:4)

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

将您的功能定义更改为:

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

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

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

答案 1 :(得分:1)

在struct声明上对它的“新名称”进行Typedef。

private void requestJsonObject(){
    RequestQueue queue = Volley.newRequestQueue(this);
    StringRequest stringRequest = new StringRequest(Request.Method.GET, PATH_TO_SERVER, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            spinnerData.clear();
            spinnerData.addAll(Arrays.asList(mGson.fromJson(response, DataObject[].class)));
            spinnerAdapter.notifyDataSetChanged();
        }
    });

    queue.add(stringRequest);
}

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

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

答案 2 :(得分:0)

而不是

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

使用

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

答案 3 :(得分:0)

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

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

typedef struct _matrix{
    int Val, Next;
}matrix;
相关问题