2010-09-15 20 views
6

ho questo file include (memory .h)Errore: Previsto ')' prima '*' token

#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 */ 

E questo file di implementazione (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 

Quando provo a compilare memory.c I ottieni questo errore per ogni singola definizione di funzione

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

dove la riga 5 è la definizione della funzione per memory_init()

Qualcuno può dirmi perché ho ricevuto questo errore?

+0

Che compilatore/piattaforma? – abelenky

+0

gcc versione 4.2.1 su OSX Snow Leopard, con opzione -ansi –

+2

Forse qualche altra intestazione è già definita MEMORY_H prima che l'intestazione sia inclusa? – Dirk

risposta

14

Poiché il sistema memory.h ombreggia il tuo memory.h, causando il #include per riuscire senza dichiarare i tipi. Diverse correzioni possibili:

  • Rinominare il file, probabilmente per il meglio in ogni caso, per ridurre la potenziale confusione.
  • Includi il file tramite una sottodirectory di prefisso (ad es., #include <myproj/memory.h>).
  • Spostare il file nella stessa directory del file di origine, in modo da rendere effettive le regole di precedenza #include per i nomi di file inclusi in ".
  • Verificare che le opzioni del percorso di pre-processore C includano il percorso dell'intestazione del progetto prima dei percorsi dell'intestazione di sistema.
+0

Era un problema così stupido? Si lo era. Grazie :-) –

+0

Per evitare problemi futuri, esiste un riferimento rapido per i nomi di intestazione C standard? –

+0

@klez Sembra essere una domanda esistente: http://stackoverflow.com/questions/2027991/list-of-standard-header-files-in-c-and-c. In questo caso, però, gli elenchi relativi agli standard non avrebbero aiutato, dato che 'memoria.h' non è un'intestazione standard. Puoi sempre vedere ciò che il tuo sistema operativo fornisce con qualcosa come 'find/usr/include/-type f -name '* .h''. – llasram

3

Questa risposta è molto tardi, ma ho riscontrato un problema simile.

Credo che il problema è correlato a un errore di battitura nel file .h in cui si dichiara una struct mm emory. Se togli quel "m" in più dovrebbe funzionare.

+3

La tua risposta è davvero tardiva e il problema non era quello :-) Grazie comunque –

-1

Nel codice è stato definito in questo modo per memory.h

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

Nel caso in cui uno dei tuoi altri file che si utilizzano nel progetto sta avendo lo stesso #define cioè MEMORY_H allora si può ottenere questo errore .

Soluzione:

#ifndef XYZ_MEMORY_H 
#define XYZ_MEMORY_H 
... 
... 
#endif 
Problemi correlati