ошибка: ожидается ')' до '*' токена - PullRequest
7 голосов
/ 15 сентября 2010

У меня есть этот файл включения (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 ]

14 голосов
/ 15 сентября 2010

Поскольку система memory.h скрывает ваш memory.h, в результате чего #include завершается успешно без объявления ваших типов.Несколько возможных исправлений:

  • Переименуйте ваш файл - возможно, в лучшем случае, чтобы избежать путаницы.
  • Включите ваш файл через подкаталог префикса (например, #include <myproj/memory.h>).
  • Переместите файл в ту же директорию, что и исходный файл, чтобы вступили в силу правила приоритета #include для имен файлов, заключенных в ".
  • Убедитесь, что ваш C предварительноОпции пути к процессору включают путь к заголовку вашего проекта до пути к системному заголовку.
3 голосов
/ 07 июля 2011

Этот ответ действительно поздно, но я столкнулся с подобной проблемой.

Я думаю, что ваша проблема связана с опечаткой в ​​вашем .h файле, где вы объявляете структуру mm emory.Если вы удалите это лишнее «m», оно должно работать.

0 голосов
/ 30 марта 2012

В вашем коде вы определили это для memory.h

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

В случае, если любой из ваших других файлов, которые вы используете в своем проекте, имеет такой же #define i.e MEMORY_H, вы можете получить эту ошибку.

Решение:

#ifndef XYZ_MEMORY_H
#define XYZ_MEMORY_H
...
...
#endif
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...