2010-09-15 13 views
6

je ce fichier include (memory .h)erreur: attendu ')' avant '*' jeton

#ifndef MEMORY_H 
#define MEMORY_H 

#ifdef __cplusplus 
extern "C" { 
#endif 

    typedef struct mmemory { 
     int* cells; 
     int* current_cell; 
     int cells_number; 
    } memory; 

    void memory_init(memory* mymemory, int size); 
    void step_left(memory* mymemory, int steps); 
    void step_right(memory* mymemory, int steps); 
    void cell_inc(memory* mymemory, int quantity); 
    void print_cell(memory* mymemory); 
    void get_char(memory* mymemory); 


#ifdef __cplusplus 
} 
#endif 

#endif /* MEMORY_H */ 

Ce fichier d'implémentation (memory.c)

#include <stdlib.h> 
#include "memory.h" 

void 
memory_init (memory* mymemory, int size) 
{ 
    mymemory->cells = (int*) malloc (sizeof (int) * size); 
    mymemory->cells_number = size; 
    mymemory->current_cell = (int*) ((mymemory->cells_number/2) * sizeof (int)); 
} 
... //other function definitions follow 

Lorsque je tente de compiler memory.c I obtenir cette erreur pour chaque définition de fonction

src/memory.c:5: error: expected ')' before '*' token

où ligne 5 est la définition de la fonction pour memory_init()

Quelqu'un peut-il me dire pourquoi je reçois cette erreur?

+0

Qu'est-ce que le compilateur/plate-forme? – abelenky

+0

gcc version 4.2.1 sur OSX Snow Leopard, avec le commutateur -ansi –

+2

Peut-être qu'un autre en-tête a déjà défini MEMORY_H avant que votre en-tête ne soit inclus? – Dirk

Répondre

14

Parce que le système memory.h observe votre memory.h, le #include réussira sans déclarer vos types. Plusieurs correctifs possibles:

  • Renommez votre fichier - probablement pour le mieux dans tous les cas, afin de réduire les risques de confusion.
  • Incluez votre fichier via un sous-répertoire de préfixe (par exemple, #include <myproj/memory.h>).
  • Déplacez votre fichier dans le même répertoire que le fichier source, en prenant en compte les règles de priorité #include pour les noms de fichiers enveloppés dans ".
  • Assurez-vous que les options de chemin d'accès du pré-processeur C placent votre chemin d'en-tête de projet avant les chemins d'en-tête système.
+0

Était-ce un problème si stupide? Oui c'était. Merci :-) –

+0

Pour éviter les problèmes futurs, existe-t-il une référence rapide pour les noms d'en-têtes C standard? –

+0

@klez Cela semble être une question existante: http://stackoverflow.com/questions/2027991/list-of-standard-header-files-in-c-and-c. Dans ce cas, les listes liées aux normes n'auraient pas aidé, car 'memory.h' n'est pas un en-tête standard. Vous pouvez toujours voir ce que votre système d'exploitation particulier fournit avec quelque chose comme 'find/usr/include/-type f -name '* .h''. – llasram

3

Cette réponse est vraiment en retard, mais j'ai rencontré un problème similaire.

Je pense que votre problème est lié à une faute de frappe dans votre fichier .h où vous déclarez une struct mm Emory. Si vous supprimez ce «m» supplémentaire, cela devrait fonctionner.

+3

Votre réponse est vraiment en retard et le problème n'était pas que :-) Merci quand même –

-1

Dans votre code que vous avez défini comme celui-ci pour memory.h

#ifndef MEMORY_H 
#define MEMORY_H 
... 
... 
#endif 

Dans le cas où l'un de vos autres fichiers que vous utilisez dans votre projet est d'avoir la même #define-à-dire MEMORY_H alors vous pouvez obtenir cette erreur .

Solution:

#ifndef XYZ_MEMORY_H 
#define XYZ_MEMORY_H 
... 
... 
#endif 
Questions connexes