Welcher Fehler liegt in meiner C-Headerdatei vor?
Für ein Uniprojekt programmiere ich aktuell in C. Konkret geht es um verschiedene Touren, die mit eigenen Strukturen und Nodes realisiert werden sollen. Dafür habe ich die Strukturen in der Datei tours.h vordefiniert. Das ist die Datei: #ifndef TOUR_H
#define TOUR_H
typedef struct island{
char island_name[20];
char opening_hours[20];
}Island;
typedef struct Node{
Island island;
struct Node *next;
struct Node *prev;
}Node;
typedef struct tour{
int tournumber;
Node *start;
}Tour;
#endif
Ich habe dabei folgendes Problem: die Datei tours.h wird in der Datei tours.c eingebunden mit dem Befehl #include "tours.h" um die Definitionen in der Headerdatei nutzen zu können. Dabei gibt mir der Compiler folgenden Fehler:
1 user-submitted files matching "^[a-zA-Z0-9_]*\.[cC]$" found for compilation: tours.c
Compiler output:
In file included from node.c:9:
node.h:11:10: fatal error: island.h: No such file or directory
#include "island.h"
^~~~~~~~~~
compilation terminated.
Ich verstehe nicht, wobei der Fehler liegt, da ich nie eine Datei island.h inkludiert habe, sondern neben stdio, stdlib und string.h. Es gibt auch keine Datei namens node.h bzw. node.c. Wo liegt der Fehler?
Hier der Fehler
[Bild entfernt]
2 Antworten
#ifndef TOUR_H
#define TOUR_H
typedef struct island{
char island_name[20];
char opening_hours[20];
}Island;
typedef struct Node{
Island island;
struct Node *next;
struct Node *prev;
}Node;
typedef struct tour{
int tournumber;
Node *start;
}Tour;
#endif
Ah, scheiß Formatierung.
Liegen die Files im gleichen Verzeichnis?
Gut möglich, wenn lokal alles klappt, dann solltest Du Dir nochmal den Upload-Prozess anschauen, Wird nen Archiv hochgeladen? Gibt es Anforderungen an die Verzeichnisstruktur o.ä.?
Btw.: Wird neben der Fehlermeldung auch der eigentliche Aufruf des Compilers wiedergegeben? Das wäre ggf. wegen sonstigen Flags interessant, da es ja auch verschiedene Sprachstandards gibt.
Ich hatte damit noch nie Probleme: das Prinzip ist so, man lädt alle Dateien einzeln hoch und dann sollte eigentlich alles laufen. Der Compiler überprüft dann und gibt rotes bzw. grünes Licht
Ich hab gerade mal zum Spaß die Typdefinitionen aus der Headerdatei direkt in die tours.c gepackt und er gibt immer noch den gleichen Fehler
Und Du sagst, es gibt keien island.h udn Du inkludierst die auch nicht? Dann muß das doch mittelbar passieren...
Lade doch mal ein runtergestripptes C-File hoch, daß nichts beinhaltet, was in Deinen HEader steht udn nur die Sys-Includes nutzt.
Lässt sich der Fehler dann reproduzieren, wird es interessant.
Sagmal, in der Fehlermeldung wird auch node.h erwähnt.
Hattest Du eien node.h?
Oder verlangt die Aufgabe, daß diese Dateien so heißen sollen udn die entsprechenden typedefs beinhalten sollen?
Hab oben nochmal den genauen Fehler hochgeladen abfotographiert als Bild. Der Fehler wird immer angezeigt, auch wenn das C-File überhaupt keine Includes enthält
Ne, ich hatte keinen node.h. Hab ich nie definiert und nie inkludiert.Hab ja die nodes in der tours.h definiert. Die Aufgabe gibt keine Vorgaben wie die Dateien und header heißen sollen
Naja, die Fehlermeldung lautet ja, daß der HEader node.h, der von node.c inkludiert wird, die nicht vorhandene island.h inkludiert.
Wenn Du das nei so hattest udn das nciht sowas wie nen Cruft sein kann, dann schau bitte nochmal in die Aufgabenstellung, ob da explizit gefordert wird, daß typedefs immer in HEader mit gleichem Namen sein sollen o.ä. .
Eien andere Möglichkeit dme auf die Spur zu kommen wäre eien leere island.h mit hochzuladen und zu schauen, was dann passiert.
Hab oben nochmal ein Bild eingefügt von dem Versuch mit leerer island.h. Die Meldung ist weg, dafür erscheint ein anderer Fehler
Das sieht fast so aus als gäbe es eien vorgegebene node.h, node.c usw. - oder aber als würden hier verschiedene Dateien zusammengewürfelt.
Alles klar, danke. Dann werde ich das mal erfragen in der nächsten Zeit
Ich habe ein tours.c gemacht und darin dein tours.h inkludiert. Bei mir lässt sich das ohne Fehler kompilieren.
(Compiler: gcc)
Fehlermeldung: 1 user-submitted files matching "^[a-zA-Z0-9_]*\.[cC]$" found for compilation: tours.c
Compiler output:
In file included from node.c:9:
node.h:11:10: fatal error: island.h: No such file or directory
#include "island.h"
^~~~~~~~~~
compilation terminated.
tours.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "tours.h"
int main(void){
int tournumber;
Island islands[5];
islanddata(islands);
Tour tours [4]= {{0,NULL},{0,NULL},{0,NULL},{0,NULL}};
tourdata(tours,islands);
printf("Please enter a tour number (1-4)or enter 0 for exit the program: ");
scanf("%d",&tournumber);
if(tournumber == 0){
return 0;
}
else if(tournumber >=1 && tournumber<=4){
printtable(tours[(tournumber-1)]);
}
else{
printf("Invalid input");
}
return EXIT_SUCCESS;
}
Node *Create_Node(Island island){
Node *newNode = (Node*)malloc(sizeof(Node));
newNode->island= island;
newNode->next= NULL;
newNode->prev= NULL;
return newNode;
}
void addNode(Tour *tour, Island island){
Node *newNode= Create_Node(island);
if(tour->start == NULL){
tour->start= newNode;
}
else{
Node *temp = tour->start;
while (temp->next !=NULL){
temp= temp->next;
}
temp->next= newNode;
newNode->prev= temp;
}
}
void islanddata(Island islands[]){
strcpy(islands[0].island_name,"Amity");
strcpy(islands[0].opening_hours,"09:00 - 17:00");
strcpy(islands[1].island_name,"Craggy");
strcpy(islands[1].opening_hours,"09:00 - 16:00");
strcpy(islands[2].island_name,"Isla Nubar");
strcpy(islands[2].opening_hours,"07:00 - 12:00");
strcpy(islands[3].island_name,"Shutter");
strcpy(islands[3].opening_hours,"08:00 - 20:00");
strcpy(islands[4].island_name,"Skull");
strcpy(islands[4].opening_hours,"08:00 - 17:30");
}
void tourdata(Tour tours[], Island islands[]){
tours[0].tournumber= 1;
addNode(&tours[0],islands[0]);
addNode(&tours[0],islands[1]);
addNode(&tours[0],islands[2]);
addNode(&tours[0],islands[0]);
tours[1].tournumber= 2;
addNode(&tours[1],islands[4]);
addNode(&tours[1],islands[1]);
addNode(&tours[1],islands[2]);
addNode(&tours[1],islands[4]);
tours[2].tournumber= 3;
addNode(&tours[2],islands[3]);
addNode(&tours[2],islands[4]);
addNode(&tours[2],islands[3]);
tours[3].tournumber= 4;
addNode(&tours[3],islands[2]);
addNode(&tours[3],islands[4]);
addNode(&tours[3],islands[3]);
addNode(&tours[3],islands[0]);
addNode(&tours[3],islands[2]);
}
void printtable(Tour tour){
printf("---------------------------------------------------\n");
printf("---------------- Tour %d ---------------------------\n",tour.tournumber);
printf("---------------------------------------------------\n");
Node *current= tour.start;
while(current!= NULL){
printf("---------------------------------------------------\n");
printf("Island : %s\n", current->island.island_name);
printf("Opening hours: %s\n",current->island.opening_hours);
current= current->next;
}
printf("---------------------------------------------------\n");
printf(" End\n");
}
tours.h
#ifndef TOUR_H
#define TOUR_H
typedef struct island{
char island_name[20];
char opening_hours[20];
}Island;
typedef struct Node{
Island island;
struct Node *next;
struct Node *prev;
}Node;
typedef struct tour{
int tournumber;
Node *start;
}Tour;
Node *Create_Node(Island island);
void addNode(Tour *tour, Island island);
void islanddata(Island islands[ ]);
void tourdata(Tour tours[ ], Island islands[ ]);
void printtable(Tour tour);
#endif
Kann ich dir den gesamten Code mal schicken? wäre sehr cool, wenn du mal drüberschauen könntest
Ich habe es jetzt kompiliert. Das klappt ohne Probleme, und das Programm funktioniert auch.
Please enter a tour number (1-4)or enter 0 for exit the program: 1
---------------------------------------------------
---------------- Tour 1 ---------------------------
---------------------------------------------------
---------------------------------------------------
Island : Amity
Opening hours: 09:00 - 17:00
---------------------------------------------------
Island : Craggy
Opening hours: 09:00 - 16:00
---------------------------------------------------
Island : Isla Nubar
Opening hours: 07:00 - 12:00
---------------------------------------------------
Island : Amity
Opening hours: 09:00 - 17:00
---------------------------------------------------
End
Danke dir, kannst du dir irgendwoher erklären, woher dann der Fehler beim Compiler kommt bei mir
Ja liegen sie. Wir müssen die files hochladen und die werden dann automatisch von einem Compiler überprüft. Vielleicht liegt da der Fehler?