2010-09-15 17 views
6

tengo este archivo de inclusión (memory .h)de error: se esperaba ')' antes '*' token de

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

y este archivo de aplicación (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 

Cuando intento compilar memory.c I Obtenga este error para cada definición de función

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

donde la línea 5 es la definición de función para memory_init()

¿Puede alguien decirme por qué me sale este error?

+0

Qué compilador/plataforma? – abelenky

+0

gcc versión 4.2.1 en OSX Snow Leopard, con el modificador -ansi –

+2

¿Quizás algún otro encabezado ya haya definido MEMORY_H antes de incluir el encabezado? – Dirk

Respuesta

14

Porque el sistema memory.h está sombreando su memory.h, causando que #include tenga éxito sin declarar sus tipos. Varias soluciones posibles:

  • Cambie el nombre de su archivo - probablemente sea el mejor en cualquier caso, para reducir la posible confusión.
  • Incluya su archivo a través de un subdirectorio de prefijos (por ejemplo, #include <myproj/memory.h>).
  • Mueva su archivo al mismo directorio que el archivo de origen, permitiendo que las reglas de precedencia #include para nombres de archivos incluidos en " surtan efecto.
  • Asegúrese de que su preprocesador C incluya las opciones de ruta, coloque la ruta del encabezado del proyecto antes de las rutas del encabezado del sistema.
+0

¿Fue tan estúpido un problema? Sí, lo era. Gracias :-) –

+0

Para evitar problemas en el futuro, ¿hay una referencia rápida para los nombres de encabezado C estándar? –

+0

@klez Esa parece ser una pregunta existente: http://stackoverflow.com/questions/2027991/list-of-standard-header-files-in-c-and-c. Sin embargo, en este caso, las listas relacionadas con estándares no habrían ayudado, porque 'memory.h' no es un encabezado estándar. Siempre puede ver lo que su sistema operativo particular ofrece con algo como 'find/usr/include/-type f -name '* .h''. – llasram

3

Esta respuesta es muy tarde, pero me encontré con un problema similar.

Creo que su problema está relacionado con un error tipográfico en el archivo .h , donde se declara una estructura mm Emory. Si eliminas esa 'm' adicional, debería funcionar.

+3

Tu respuesta es muy tarde y el problema no fue ese :-) Gracias de todos modos –

-1

En su código que haya definido así por memory.h

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

En caso de que cualquiera de sus otros archivos que utiliza en su proyecto es tener la misma #define es decir MEMORY_H entonces se puede obtener este error .

Solución:

#ifndef XYZ_MEMORY_H 
#define XYZ_MEMORY_H 
... 
... 
#endif 
Cuestiones relacionadas