Ich habe einen C-Code geschrieben. Wenn ich es unter Linux kompiliere, wird in der Header-Datei der folgende Fehler angezeigt: storage class specified for parameter i32 , i8 und so weiter
schlechte Frage, sollte mit dem tatsächlichen schlechten Code aktualisiert werden ..
RushPL
17
Warum kritisiert ihr alle? Wenn die Person wüsste, wo genau das Problem liegt, hätte sie es behoben, anstatt das Snippet zu veröffentlichen. Oder möchten Sie 10 kLOC einfügen? Die Frage wird positiv bewertet, da es sich um ein allgemeines und arkanes Problem mit einer gut akzeptierten Antwort handelt.
Vorac
1
Ich bekam diesen Fehler, als ich träumte und erklärte eine Memebr-Funktion wie externin der Klassendefinition (rutscht verlegen ab, die Wangen in Flammen)
Mawg sagt, Monica am
Antworten:
265
Möglicherweise haben Sie irgendwo ein Semikolon in einer Header-Datei vergessen. Stellen Sie sicher, dass jede Zeile mit endet;
Dies. Der Fehler wird wahrscheinlich in einer Quellcodedatei gemeldet, die Sie sicher nicht berührt haben. Diese Datei enthält jedoch die Header-Datei mit dem Syntaxfehler.
user149408
18
Sie haben irgendwo einen Code, der wahrscheinlich im Volltext der Fehlermeldung angegeben ist und ungefähr so funktioniert:
voidfunction(staticint foo)
Das staticist dort nicht erlaubt. Es könnte auch eine andere Speicherklasse sein, wie registeroder extern.
Ich hatte die gleiche Erfahrung. Das Problem lag bei der Funktionsprototypdeklaration in der Headerdatei, bei der am Ende der Funktionsdeklaration ein Semikolon fehlte.
Die Funktion wurde in den Kompilierungsprotokollen kurz vor dem Fehlerausschnitt als "In Funktion ..." angegeben
@LPs Ich bin anderer Meinung - dies ist eine mögliche Antwort auf das von OP präsentierte Problem (tatsächlich war es die Antwort, die ich brauchte).
Woodrow Barlow
6
Ich habe den gleichen Fehler einmal gemacht. Die Lösung bestand darin, in Dateien zu suchen und nach ausstehenden Anweisungen zu suchen (z. B. nach einer nicht geschlossenen Klammer oder einem fehlenden Semikolon). Normalerweise handelt es sich um einen trivialen Fehler, aber der Compiler beschwert sich.
Die schlechte Nachricht ist, dass es sich nicht immer in der richtigen Zeile (oder sogar in der richtigen Datei!) Beschwert. Die gute Nachricht ist, dass in diesen Fällen etwas Nützliches steht wie:
WRONGFILE.h: In function ‘FUNCTION_OF_ANOTHER_FILE_WRT_WRONG_FILE’"
WRONGFILE:line:col: error: storage class specified for parameter ‘param’ before.
Gehen Sie und checken Sie diese andere gemeldete Datei ein.
extern
in der Klassendefinition (rutscht verlegen ab, die Wangen in Flammen)Antworten:
Möglicherweise haben Sie irgendwo ein Semikolon in einer Header-Datei vergessen. Stellen Sie sicher, dass jede Zeile mit endet
;
quelle
Sie haben irgendwo einen Code, der wahrscheinlich im Volltext der Fehlermeldung angegeben ist und ungefähr so funktioniert:
void function(static int foo)
Das
static
ist dort nicht erlaubt. Es könnte auch eine andere Speicherklasse sein, wieregister
oderextern
.quelle
Ich hatte die gleiche Erfahrung. Das Problem lag bei der Funktionsprototypdeklaration in der Headerdatei, bei der am Ende der Funktionsdeklaration ein Semikolon fehlte.
Die Funktion wurde in den Kompilierungsprotokollen kurz vor dem Fehlerausschnitt als "In Funktion ..." angegeben
Hoffe das hilft!!
quelle
Ich habe den gleichen Fehler einmal gemacht. Die Lösung bestand darin, in Dateien zu suchen und nach ausstehenden Anweisungen zu suchen (z. B. nach einer nicht geschlossenen Klammer oder einem fehlenden Semikolon). Normalerweise handelt es sich um einen trivialen Fehler, aber der Compiler beschwert sich.
Die schlechte Nachricht ist, dass es sich nicht immer in der richtigen Zeile (oder sogar in der richtigen Datei!) Beschwert. Die gute Nachricht ist, dass in diesen Fällen etwas Nützliches steht wie:
WRONGFILE.h: In function ‘FUNCTION_OF_ANOTHER_FILE_WRT_WRONG_FILE’" WRONGFILE:line:col: error: storage class specified for parameter ‘param’ before.
Gehen Sie und checken Sie diese andere gemeldete Datei ein.
quelle
Um es zusammenzufassen
;
: Ein anderer Fall kann)
in einer Funktionszeigerdeklaration fehlen :extern void init_callbacks(void (*init)(), void (*end());
(fehlende schließende Klammer danach
*end
).quelle
Wenn Sie den vim-Editor verwenden, können Sie das fehlende Semikolon leicht finden, indem Sie Folgendes eingeben:
... und dann hoch / runter springen (mit N / n), bis eine problematische Linie gefunden wird.
quelle
Ich hatte ein ähnliches Problem, während beim Fehler der Name der Speicherklasse in der statischen Zuweisung fehlte. Z.B:
.h: class MyClass { static const int something; } .cpp: const int something = 1; // returns error const int MyClass::something = 1; // OK
quelle