«неизвестное имя типа» в структуре c при использовании gcc - PullRequest
1 голос
/ 20 марта 2019

У меня есть программа, которая обрабатывает список в c, она отлично работает, если она у меня есть в одном исходном файле, когда я пытаюсь отделить ее и скомпилировать, она получила эту ошибку «delete_functions.c: 15: 13:ошибка: неизвестное имя типа 'nodetype' ”та же ошибка идет для functions_functions.c и insert_functions.c, вот код

main.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
}

types.h

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

delete_functions.h

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

functions_functions.h

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

insert_functions.h

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

1 Ответ

1 голос
/ 20 марта 2019

Согласно сообщению об ошибке GCC, в файле delete_functions.c есть ошибка.

Предположительно, это выглядит так в начале:

#include "delete_functions.h"

Так как delete_functions.h делаетсам по себе не включает types.h, вам нужно сначала включить его:

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

В качестве альтернативы, вы можете добавить include guard к своим заголовкам, чтобы их можно было безопасно включать несколько раз,как это для 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 привел бы к другому определению, что приведет к ошибкам компилятора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...