Welcher Fehler liegt in meiner C-Headerdatei vor?


04.08.2024, 18:09

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?


verreisterNutzer  04.08.2024, 17:51

Ja liegen sie. Wir müssen die files hochladen und die werden dann automatisch von einem Compiler überprüft. Vielleicht liegt da der Fehler?

KarlRanseierIII  04.08.2024, 17:53
@verreisterNutzer

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.

verreisterNutzer  04.08.2024, 17:55
@KarlRanseierIII

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

verreisterNutzer  04.08.2024, 17:56
@KarlRanseierIII

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

KarlRanseierIII  04.08.2024, 18:01
@verreisterNutzer

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.

KarlRanseierIII  04.08.2024, 18:09
@KarlRanseierIII

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?

verreisterNutzer  04.08.2024, 18:11
@KarlRanseierIII

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

verreisterNutzer  04.08.2024, 18:12
@KarlRanseierIII

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

KarlRanseierIII  04.08.2024, 18:14
@verreisterNutzer

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.

verreisterNutzer  04.08.2024, 18:19
@KarlRanseierIII

Hab oben nochmal ein Bild eingefügt von dem Versuch mit leerer island.h. Die Meldung ist weg, dafür erscheint ein anderer Fehler

KarlRanseierIII  04.08.2024, 18:28
@verreisterNutzer

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.

Ich habe ein tours.c gemacht und darin dein tours.h inkludiert. Bei mir lässt sich das ohne Fehler kompilieren.

(Compiler: gcc)


verreisterNutzer  04.08.2024, 17:44

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.
verreisterNutzer  04.08.2024, 17:42

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");

}

verreisterNutzer  04.08.2024, 17:41

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

verreisterNutzer  04.08.2024, 17:39

Kann ich dir den gesamten Code mal schicken? wäre sehr cool, wenn du mal drüberschauen könntest

ultrarunner  04.08.2024, 17:47
@verreisterNutzer

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