2016-11-02 5 views
-1

Ich versuche, Conways Spiel des Lebens in C zu lösen. Ich habe eine .h-Datei geschrieben, die alle meine Funktionen enthält, aber ich erhalte den folgenden Fehler in der Header-Datei: Fehler: unbekannter Typ Name "Matrix"Fehler: unbekannter Typ Name struct

Dies ist der Anfang der Header-Datei, die meine Strukturdeklaration enthält und die erste Funktion:

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

In C können Sie das 'struct' Schlüsselwort nicht weglassen,' Matrix a [MAX] [MAX] 'sollte' struct Matrix a [MAX] [MAX] 'sein (oder verwenden Sie ein' typedef') –

+0

Hier wird erklärt : http://stackoverflow.com/questions/1675351/typedef-struct-vs-struct-definitionen – germanfr

+0

Oder die Definition sollte 'typedef struct Matrix sein { int Val, Next; } Matrix; '. – JohnB

Antwort

4

Sie definiert genannt eine Struktur struct matrix. Dies ist nicht dasselbe wie matrix, da den Strukturdefinitionen das Schlüsselwort struct vorangestellt werden muss.

auf Ihre Funktionsdefinition ändern:

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

Außerdem sollten Sie nicht Code in eine Header-Datei setzen. Nur Typdefinitionen und Deklarationen gehören dorthin. Wenn mehr als eine Quellendatei diese Kopfzeile enthalten soll, enthält die für jede Kopfzeile erstellte Objektdatei eine Kopie der Funktion intro_date(). Beim Versuch, diese Dateien zu verknüpfen, erhalten Sie eine Fehlermeldung, dass intro_date() neu definiert wurde.

Die Definition von intro_date sollte in genau einer Quelldatei vorhanden sein. Dann würde der Header nur die Deklaration enthalten.

1

Verwenden

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

Oder spec ify deklarations explictly dass es struct ist:

struct matrix a[MAX][MAX]; 
0

Statt

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

Verwendung

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