2010-09-15 67 views
6

Tôi có này bao gồm tập tin (memory .h)lỗi: dự kiến ​​')' trước khi '*' thẻ

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

Và tập tin thực hiện này (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 

Khi tôi cố gắng biên dịch memory.c tôi nhận được lỗi này cho mỗi và mọi định nghĩa chức năng

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

trong đó dòng 5 là định nghĩa hàm cho memory_init()

Ai đó có thể vui lòng cho tôi biết lý do tôi nhận được lỗi này?

+0

trình biên dịch gì/nền tảng? – abelenky

+0

gcc phiên bản 4.2.1 trên OSX Snow Leopard, có chuyển đổi -ansi –

+2

Có thể một số Tiêu đề khác đã được định nghĩa MEMORY_H trước khi tiêu đề của bạn được bao gồm? – Dirk

Trả lời

14

Vì hệ thống memory.h đang che bóng memory.h của bạn, làm cho #include thành công mà không cần khai báo loại của bạn. Một số bản sửa lỗi có thể có:

  • Đổi tên tệp của bạn - có thể là tốt nhất trong mọi trường hợp, để giảm sự nhầm lẫn tiềm ẩn.
  • Bao gồm tệp của bạn qua thư mục con tiền tố (ví dụ: #include <myproj/memory.h>).
  • Di chuyển tệp của bạn vào cùng thư mục với tệp nguồn, cho phép quy tắc ưu tiên #include cho tên tệp được bao bọc trong " để có hiệu lực.
  • Đảm bảo rằng bộ xử lý trước C của bạn bao gồm các tùy chọn đường dẫn đặt đường dẫn tiêu đề dự án của bạn trước đường dẫn tiêu đề hệ thống.
+0

Điều đó có thật ngu ngốc không? Đúng. Cảm ơn bạn :-) –

+0

Để tránh các sự cố trong tương lai, có tham chiếu nhanh về tên tiêu đề C chuẩn không? –

+0

@klez Điều đó có vẻ là một câu hỏi hiện có: http://stackoverflow.com/questions/2027991/list-of-standard-header-files-in-c-and-c. Tuy nhiên, trong trường hợp này, các danh sách liên quan đến tiêu chuẩn sẽ không có ích, bởi vì 'memory.h' không phải là tiêu đề chuẩn. Bạn luôn có thể xem những gì hệ điều hành cụ thể của bạn cung cấp với một cái gì đó như 'find/usr/include/-type f -name '* .h''. – llasram

3

Câu trả lời này thực sự là muộn nhưng tôi gặp phải sự cố tương tự.

Tôi nghĩ rằng sự cố của bạn liên quan đến lỗi đánh máy trong tệp .h nơi bạn khai báo cấu trúc mm emory. Nếu bạn loại bỏ thêm 'm' thì nó sẽ hoạt động.

+3

Câu trả lời của bạn thực sự là muộn và vấn đề không phải là :-) –

-1

Trong mã của bạn, bạn đã xác định như thế này cho memory.h

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

Trong mọi trường hợp các tập tin khác của bạn mà bạn sử dụng trong dự án của bạn là có cùng #define tức MEMORY_H sau đó bạn có thể nhận được lỗi này .

Giải pháp:

#ifndef XYZ_MEMORY_H 
#define XYZ_MEMORY_H 
... 
... 
#endif 
Các vấn đề liên quan