unknown type name typedef
-
Hallo!
Wieso bekomme ich hier die Fehlermeldung unknown type name TNode?#ifndef COUNTSUBDIRS_H_INCLUDED #define COUNTSUBDIRS_H_INCLUDED struct TNode { struct TNode * pNext; char * path; }; typedef TNode * TList;
im main wird das headerfile folgendermaßen eingebunden:
#include <stdio.h> #include <errno.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <ftw.h> #include "CountSubDirs.h" int main(int argc, char **argv) { if (!argv[1] || access(argv[1], R_OK)) { return 1; } AddDirectory(argv[1]); CountSubDirectories(); RemoveAll(); return 0; }
laut internet, gibt es in c auch die direktive typedef, also muss es durch einen syntaxfehler meinerseits verursacht worden sein. kann mir aber wer welchen wo dieser ist?
mfg
ACnut
-
Du hast keinen Typ "TNode" definiert
Deshalb funktionierttypedef TNode * TList;
Du hast nur den Typ "struct TNode" (Zeile 4) definiert
-
hast recht
aber in C++ hätte das schon funktioniert, oder?hmmm und jetzt bekomme ich den fehler undefined reference to <aufgerufene Funktionen im main(AddDirectory,...)>
#ifndef COUNTSUBDIRS_H_INCLUDED #define COUNTSUBDIRS_H_INCLUDED struct TNode { struct TNode * pNext; char * path; }; typedef struct TNode * TList; int const OK=1; int const NOK=0; TList * dirs=0; int length=0; unsigned int total=0; //adds a directory to directory list void AddDirectory(char const* dir); //removes a directory void RemoveDirectory(char const* dir); //removes all directories void RemoveAll(); //counts all sub directories void CountSubDirectories(); . . . #endif // COUNTSUBDIRS_H_INCLUDED
im c file werden die oben definierten funktionsprototypen, dann eben ausimplementiert.
benutzen tu ich Code::Blocks auf Ubuntu
was passt jetzt schon wieder nicht?
-
ACnut schrieb:
hast recht
aber in C++ hätte das schon funktioniert, oder?Ja. In C++ soll es angeblich vieles geben, was es in C nicht gibt
.
was passt jetzt schon wieder nicht?
Irgendeine der Angaben, die du machst, wird wohl nicht stimmen. Vielleicht wird die Funktion doch nirgend implementiert (vielleicht wird irrtümlich eine Funktion implementiert, die so ähnlich heißt?). Vielleicht wird die resultierende Datei mit den Funktionen nicht zu der Datei mit der main-Funktion gelinkt. Vielleicht ist die Reihenfolge falsch.
http://www.c-plusplus.net/forum/304133
-
gut dann poste ich mal eine "miniversion"(hoffentlich mini genug)
also das header file:
#ifndef COUNTSUBDIRS_H_INCLUDED #define COUNTSUBDIRS_H_INCLUDED struct TNode { struct TNode * pNext; char * path; }; typedef struct TNode * TList; int const OK=1; int const NOK=0; TList * dirs=0; unsigned int total=0; //adds a directory to directory list void AddDirectory(char const* dir); //removes a directory void RemoveDirectory(char const* dir); //removes all directories void RemoveAll(); //counts all sub directories void CountSubDirectories(); . . . #endif // COUNTSUBDIRS_H_INCLUDED
die protoptypen für die listenfunktionen wurden darunter geschrieben
c-file wo die funktionen implementiert werden:
#include <stdio.h> #include <errno.h> #include <unistd.h> #include <string.h> #include <dirent.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <ftw.h> #include "CountSubDirs.h" void AddDirectory(char const* dir) { if(dirs==0) return 0; //listenfunktion InitList(dirs); //listenfunktion Append(dirs, dir); } void RemoveDirectory(char const* dir) { if(dirs==0) { fprintf(stderr, "%s\n", "There are no directories yet to delete!"); return; } //Delete(dirs,dir); if(Length(dirs)==0) { free(dirs); dirs=0; } } void RemoveAll() { if (dirs==0) return; //Clear(dirs); dirs=0; } void CountSubDirectories() { int i=0; TNode* pItem=dirs; if(dirs==0) { fprintf(stderr, "%s\n", "No directories added yet!"); return; } for(pItem;pItem!=0;pItem=pItem->pNext) { total=0; if (ftw(pItem->path,&sum, 1)) { perror("ftw"); return 2; } printf("Count of subdirs in %s is: %lu\n\n", item->path, total); } }
unterhalb werden die listenfunktionen implementiert (wobei ein austausch de rpositionen auch nichts gebracht hat)
die main sieht so aus:
#include <stdio.h> #include <errno.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <ftw.h> #include "CountSubDirs.h" int main(int argc, char **argv) { if (!argv[1] || access(argv[1], R_OK)) { return 1; } AddDirectory(argv[1]); CountSubDirectories(); RemoveAll(); return 0; }
-
Fehlermeldung?
-
fehlermeldung:
obj/Debug/main.o||In function `main':| /home/bsy3/Workspace/CodeBlocks_Workspace/CountSubDirs/main.c|14|undefined reference to `AddDirectory'| /home/bsy3/Workspace/CodeBlocks_Workspace/CountSubDirs/main.c|15|undefined reference to `CountSubDirectories'| /home/bsy3/Workspace/CodeBlocks_Workspace/CountSubDirs/main.c|16|undefined reference to `RemoveAll'| ||=== Build finished: 3 errors, 0 warnings (0 minutes, 0 seconds) ===|
-
Bist du mal dem Link bezüglich Linkerfehlern gefolgt (no pun intended), in dem Link, den ich oben angegeben habe? Sieht so aus, als würdest du eine Art IDE benutzen, hättest jedoch die Quelldateien nicht korrekt zu einem Projekt zusammen gefügt.
-
nach dem erstellen der Dateien werden anscheinend diese nicht automatisch gelinkt, sondern man muss diese dann manuell zum Projekt hinzufügen.
Jetzt funktioniert es, danke