错误:在'*'标记之前预期')'

时间:2010-09-15 17:11:44

标签: c

我有这个包含文件(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:错误:预期')'在'*'标记之前

其中第5行是memory_init()

的函数定义

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

3 个答案:

答案 0 :(得分:14)

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

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

答案 1 :(得分:3)

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

我认为您的问题与 .h 文件中的拼写错误有关,您在其中声明了一个结构 mm emory。如果删除额外的'm',它应该可以工作。

答案 2 :(得分:-1)

在您的代码中,您已为memory.h定义了这样的内容。

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

如果您在项目中使用的任何其他文件具有相同的#define即MEMORY_H,则可能会出现此错误。

解决方案:

#ifndef XYZ_MEMORY_H
#define XYZ_MEMORY_H
...
...
#endif