web-dev-qa-db-fra.com

erreur: classe de stockage spécifiée pour le paramètre

J'ai un code C écrit. Lorsque je le compile sous Linux, dans le fichier d'en-tête, il indique l'erreur suivante: storage class specified for parameter i32 , i8 etc

typedef int i32;

typedef char    i8;
60
SPB

Vous avez peut-être oublié un point-virgule dans un fichier d'en-tête quelque part. Assurez-vous que chaque ligne se termine par ;

223
Featherlegs

Vous avez du code quelque part, probablement indiqué dans le texte intégral du message d'erreur, qui fait quelque chose comme ceci:

void function(static int foo)

Le static n'y est pas autorisé. Il peut également s'agir d'une autre classe de stockage, comme register ou extern.

17
nmichaels

j'ai vécu la même expérience. Le problème était à la déclaration du prototype de fonction dans le fichier d'en-tête où un point-virgule manquait à la fin de la déclaration de fonction.

La fonction était indiquée dans les journaux de compilation comme "Dans la fonction ..." juste avant l'extrait d'erreur

J'espère que cela t'aides!!

11
Anurag Dixit

J'ai encouru cette même erreur une fois. La solution était de parcourir les fichiers et de rechercher les instructions en attente (comme une parenthèse non fermée ou un point-virgule manquant.) Habituellement, c'est vraiment une erreur triviale, mais le compilateur se plaint.

La mauvaise nouvelle est qu'elle ne se plaint pas toujours sur la bonne ligne (ou même dans le bon fichier!) La bonne nouvelle est que dans ces cas, elle dit quelque chose d'utile comme:

WRONGFILE.h: In function ‘FUNCTION_OF_ANOTHER_FILE_WRT_WRONG_FILE’"
WRONGFILE:line:col: error: storage class specified for parameter ‘param’ before. 

Allez archiver cet autre fichier signalé.

3
LDL

Si vous utilisez l'éditeur vim, vous pouvez facilement trouver le point-virgule manquant en tapant:

/[^;]\s*$

... puis sautez haut/bas (avec N/n), jusqu'à ce que la ligne problématique soit trouvée.

1
ahol967

J'ai eu un problème similaire, alors que l'erreur manquait le nom de la classe de stockage dans l'affectation statique. Par exemple.:

.h:
class MyClass {
   static const int something;
}

.cpp:
const int something = 1; // returns error
const int MyClass::something = 1; // OK
0
igraczech

Pour additionner sur ;: un autre cas peut être manquant ) dans une déclaration de pointeur de fonction:

extern void init_callbacks(void (*init)(), void (*end());

(parenthèse fermante manquante après *end).

0
Matthieu