繁体   English   中英

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

[英]error: expected ')' before '*' token

我有这个包含文件( 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()的函数定义

有人可以告诉我为什么我收到此错误?

因为系统memory.h正在影响你的memory.h ,导致#include成功而不声明你的类型。 几个可能的修复:

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

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

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

在你的代码中,你为memory.h定义了这样的代码

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

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

解:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM