2010-09-15 137 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 
相關問題