Ich schreibe ein C-Programm, und ich konnte kein entsprechendes Beispiel in Stack Overflow finden. Ich habe 2 Dateien, level.h, lib.h, die von dem Typ abhängen, der in der Datei des anderen definiert ist. Dies erzeugt einen Fehler, redefinition of typedef 'metalevel_t'/'entry_t' is a C11 feature
.Wie wird die Forward-Deklaration in C verwendet?
level.h:
#ifndef level_H
#define level_H
#include "lib.h"
// level.h
typedef struct metalevel metalevel_t;
// key value pairs, value are integers
typedef struct entry {
...
} entry_t;
lib.h:
typedef struct entry entry_t;
typedef struct metalevel{
entry_t* ...;
} metalevel_t;
metalevel_t Info[...];
Wenn ich jedoch entry_t (und metalevel_t) ersetzen unten, ich typedef requires a name
Fehler.
struct entry {
...
};
Mein Makefile sieht wie folgt aus:
CC=gcc
CFLAGS=-I.
CFLAGS=-std=c99
LDFLAGS = -lm
macro_main: macro_main.o lsm.o lib.o level.o
$(CC) -o macro_main macro_main.o lsm.o lib.o level.o $(CFLAGS)
macro_main.o:
clean:
$(RM) macro_main
Wie kann ich nach vorne Erklärung in diesem Fall benutzen?
Entfernen Sie 'typedef struct metalevel metalevel_t;' aus 'level.h'. Diese Datei enthält sowieso 'lib.h', so dass sie das existierende Typedef sehen kann. –