Warum kommt der Fehler?
-
Hallo Leute,
ich hab hier folgenden Code:
void rdir() { DIR *dirHandle; struct dirent dirEntry; struct *dirent dirResult; // Open a folder dirHandle = opendir("."); int x = 0; if (dirHandle != NULL) { while (0 == (x = readdir_r(dirHandle, &dirEntry, &dirResult))) { puts(dirEntry.d_name); } closedir(dirHandle); } std::cin.get(); } int main() { rdir(); return 0; }Und trotzdem kommt folgende Fehlermeldung:
DirReadMain.cpp: In function ‘void rdir()’:
DirReadMain.cpp:13:3: error: expected primary-expression before ‘struct’
DirReadMain.cpp:13:3: error: expected ‘;’ before ‘struct’
DirReadMain.cpp:21:55: error: ‘dirResult’ was not declared in this scope
make: *** [DirReadMain.o] Error 1Was genau will er mir hier sagen? Wo liegt das Problem?
-
Übersetz mal bitte die Zeilennummern. Wo ist das in deinem Codefragment?
-
Klingt so, als sage ihm DIR nichts.
-
Also Zeile fünf oben ist bei mir die 13.
Also die hier:struct *dirent dirResult;
-
Hast du windows includiert ? Und für dir sachen gabs auch niocht nen anderen header redir.h oder so , weiß nicht mehr genau
-
Ich arbeite mit Linux.
Und #include <dirent.h> hab ich auch
-
DirReadMain.cpp:13:3: error: expected primary-expression before ‘struct’
Das kommt weil du das
struct dirent dirEntry;nicht machen kannst , soweit ich weiß.
-
Also....
struct structname {...}Du kannst struct keine 2 namen parameter oder was auch immer geben
Deswegen auch das bei dem 2. struct der not declared dirResult fehler
-
Woanders hat das auch problemlos funktioniert ... Diesselben drei Variablen, mit denselben Typen wie in der Funktion. Daran sollte es eigentlich nicht liegen ...
-
7xCore schrieb:
DirReadMain.cpp:13:3: error: expected primary-expression before ‘struct’
Das kommt weil du das
struct dirent dirEntry;nicht machen kannst , soweit ich weiß.
Wieso ? Das "struct" ist zwar überflüssig, aber doch nicht falsch ? Ich gehe mal davon aus, dass dieser "dirent"-strukt in "dirent.h" daklariert wird und er nun einfach eine Instanz davon anlegen will ?
-
Musst wohl
struct dirent* dirResultschreiben.
-
@7xCore: das struct hab ich aus der Datei dirent.h
Es kommt nicht von mir ...
-
Hm ...
DirReadMain.cpp:13:3: error: expected primary-expression before ‘struct’
DirReadMain.cpp:13:3: error: expected ‘;’ before ‘struct’Is das dein ganzer code ?Das sieht jetzt so aus als ob du ein ";" irgendwo vergessen hättest , was ich aber nicht erkennen kann.
-
Oh ok das hab ich falsch gedeutet mit dem struct.
-
cvcv schrieb:
Musst wohl
struct dirent* dirResultschreiben.
Das war die Antwort. Jetzt funktionierts ...

-
cvcv schrieb:
Musst wohl
struct dirent* dirResultschreiben.
QFT
edit: Zu spät...
-
7xCore schrieb:
Oh ok das hab ich falsch gedeutet mit dem struct.
Jup, hast du.
struct dirent dirEntry;ist C-Style, macht das Selbe wie in C++dirent dirEntry;. Funktioniert in C++ aus Kompatibilitätsgründen. Die zweite Version hätte in C nicht funktioniert, für sowas muss man dort immer sowas wiestruct dirent_ {}; typedef struct dirent_ dirent; //oder kurz: typedef struct dirent_ {} dirent;schreiben. Kurz gefasst: structs müssen in C auch immer mit struct benannt werden, typedefs kommen ohne weitere keywords aus.