我试图在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;
}
}
答案 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;