2010-09-15 112 views
6

我有这个包括文件(memory .h错误:之前预期 ')' '*' 令牌

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

而这个执行文件(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 

当我尝试编译memory.c我得到这个错误每个和每个函数的定义

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

其中第5行是memory_init()的函数定义

有人可以告诉我为什么我得到这个错误吗?

+0

什么编译器/平台? – abelenky 2010-09-15 17:16:34

+0

OSX Snow Leopard上的gcc版本4.2.1,带有-ansi开关 – 2010-09-15 17:18:15

+2

也许某些其他标题在包含标题之前已经定义了MEMORY_H? – Dirk 2010-09-15 17:18:44

回答

14

因为系统memory.h正在遮蔽您的memory.h,导致#include在未声明类型的情况下成功。几个可能的修复:

  • 重命名您的文件 - 可能是最好的在任何情况下,以减少可能的混淆。
  • 通过前缀子目录包含您的文件(例如,#include <myproj/memory.h>)。
  • 将文件移动到与源文件相同的目录中,允许在"中包装的文件名的优先规则#include生效。
  • 确保您的C预处理器包含路径选项,将您的项目标题路径放在系统标题路径之前。
+0

这是一个如此愚蠢的问题?是的。谢谢:-) – 2010-09-15 17:21:35

+0

为了避免将来出现问题,有没有标准C头名称的快速参考? – 2010-09-15 17:25:27

+0

@klez这似乎是一个存在的问题:http://stackoverflow.com/questions/2027991/list-of-standard-header-files-in-c-and-c。在这种情况下,与标准相关的列表不会有帮助,因为memory.h不是标准头文件。您可以随时查看您的特定操作系统提供的内容,例如'find/usr/include/-type f -name'* .h''。 – llasram 2010-09-15 17:37:50

3

这个答案真的很晚,但是我遇到了类似的问题。

我觉得你的问题是在声明一个struct 毫米埃默里您.H文件相关的错字。如果你删除了额外的'm',它应该可以工作。

+3

您的回答非常晚,问题不是这样:-)无论如何 – 2011-07-07 17:11:22

-1

在你的代码已经定义了这样的memory.h

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

在任何情况下,你在你的项目中使用的其它文件是具有相同的#define即MEMORY_H那么你就可以得到这个错误。

解决方案:

#ifndef XYZ_MEMORY_H 
#define XYZ_MEMORY_H 
... 
... 
#endif 
相关问题