gpt4 book ai didi

c - 使用 gcc 时 c 结构中的 "unknown type name"

转载 作者:太空宇宙 更新时间:2023-11-04 03:12:15 25 4
gpt4 key购买 nike

我有一个用 c 语言处理列表的程序,只要我把它放在一个源文件中,它就可以正常工作,当我尝试分离它并编译它时,出现了这个错误“delete_functions.c:15:13:错误:未知类型名称'nodetype'”同样的错误发生在 functionality_functions.c 和 insert_functions.c 这里是代码

主程序

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "types.h"
#include "delete_functions.h"
#include "insert_functions.h"
#include "functionality_functions.h"

int main(){
//i did not upload all the main function code because it is way to long
}

类型.h

typedef char AirportCode[4];
typedef struct nodetype{
char Airport[4];
struct nodetype *next;
} nodetype;

删除函数.h

void Delete(nodetype *list,char node[4]);
void DeleteLast(nodetype *list);

功能函数.h

void print(nodetype *head);
nodetype *search(nodetype *list,char item[4]);
nodetype *create();

插入函数.h

void *InsertLast(nodetype *list,char item[4]);
void *InsertAfter(nodetype *list,char item[4],char node[4]);

最佳答案

根据GCC错误信息,delete_functions.c文件有错误。

大概一开始是这样的:

#include "delete_functions.h"

由于 delete_functions.h 本身不包含 types.h,因此您需要先包含它:

#include "types.h"
#include "delete_functions.h"

或者,您可以将 include guards 添加到您的 header 中,这样它们就可以安全地多次包含,例如 types.h:

#ifndef TYPES_H
#define TYPES_H

typedef char AirportCode[4];
typedef struct nodetype{
char Airport[4];
struct nodetype *next;
} nodetype;

#endif

对于delete_functions.h:

#ifndef DELETE_FUNCTIONS_H
#define DELETE_FUNCTIONS_H

void Delete(nodetype *list,char node[4]);
void DeleteLast(nodetype *list);

#endif

*_H 包含保护宏是必需的,否则 main.c 将无法再编译:types.h 中的每个类型都可以每个翻译单元只定义一次,如果没有守卫,每个 *.h 都会引入另一个定义,导致编译器错误。

关于c - 使用 gcc 时 c 结构中的 "unknown type name",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55251147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com