2010-09-09 27 views
39

Tôi có một mã C được viết. Khi tôi biên dịch nó trên Linux sau đó trong file header nó nói lỗi sau: storage class specified for parameter i32 , i8 và vân vânlỗi: lớp lưu trữ được chỉ định cho tham số

typedef int i32; 

typedef char i8; 
+7

Bạn sẽ cần hiển thị thêm một chút mã. –

+3

câu hỏi kém, cần được cập nhật với mã thực sự xấu .. – RushPL

+9

Tại sao tất cả các bạn chỉ trích? Nếu người đó biết chính xác vấn đề ở đâu, họ sẽ sửa nó, thay vì đăng đoạn mã. Hay bạn muốn dán 10 kLOC? Câu hỏi được upvoted, bởi vì nó là một vấn đề chung và phức tạp với một câu trả lời được chấp nhận tốt. – Vorac

Trả lời

166

Rất có thể bạn đã quên dấu chấm phẩy trong một tệp tiêu đề ở đâu đó. Đảm bảo mỗi dòng kết thúc bằng ;

+4

Bạn là một vị thần! –

+0

Cảm ơn một tấn vì đã cứu ngày của tôi – gsk

+0

Điều này. Lỗi có thể được báo cáo trong một số tệp mã nguồn mà bạn chắc chắn rằng bạn không chạm vào — nhưng tệp đó xảy ra bao gồm tệp tiêu đề có lỗi cú pháp. – user149408

13

Bạn có một số mã ở đâu đó, có lẽ chỉ trong toàn bộ nội dung của thông báo lỗi, mà làm điều gì đó như này:

void function(static int foo) 

static không được phép ở đó. Nó cũng có thể là một lớp lưu trữ khác, như register hoặc extern.

3

Tôi phát sinh lỗi tương tự này một lần. Giải pháp là duyệt qua các tệp và tìm kiếm các câu lệnh đang chờ xử lý (như dấu ngoặc đơn không đóng, hoặc dấu chấm phẩy bị thiếu.) Thông thường nó thực sự là một lỗi nhỏ, nhưng trình biên dịch phàn nàn.

Tin xấu là nó không phải lúc nào phàn nàn tại dòng ngay Các tin tốt là trong những trường hợp này nó nói cái gì đó hữu ích như (hoặc thậm chí trong các tập tin ngay!):

WRONGFILE.h: In function ‘FUNCTION_OF_ANOTHER_FILE_WRT_WRONG_FILE’" 
WRONGFILE:line:col: error: storage class specified for parameter ‘param’ before. 

Go và kiểm tra tệp được báo cáo khác đó.

6

tôi có cùng trải nghiệm. Vấn đề là tại khai báo nguyên mẫu hàm trong tệp tiêu đề, trong đó dấu chấm phẩy bị thiếu ở cuối khai báo hàm.

Hàm được chỉ định trong nhật ký biên dịch là "Đang hoạt động ..." ngay trước đoạn mã lỗi

Hy vọng điều này sẽ hữu ích !!

+0

Điều này không cung cấp câu trả lời cho câu hỏi. Để phê bình hoặc yêu cầu làm rõ từ tác giả, để lại nhận xét bên dưới bài đăng của họ - bạn luôn có thể nhận xét về bài đăng của riêng bạn và sau khi bạn có đủ [danh tiếng] (http://stackoverflow.com/help/whats-reputation), bạn sẽ có thể [nhận xét về bài đăng bất kỳ] (http://stackoverflow.com/help/privileges/comment). – LPs

+1

@LPs tôi không đồng ý - đây là một câu trả lời có thể cho vấn đề được trình bày bởi OP (trên thực tế, đó là câu trả lời tôi cần). –

0

Để thêm lên trên ;: một trường hợp khác có thể là một thiếu ) trong một tuyên bố con trỏ hàm:

extern void init_callbacks(void (*init)(), void (*end()); 

(thiếu dấu ngoặc đóng cửa sau khi *end).

-1

Tôi cũng có cùng một kinh nghiệm về dấu chấm phẩy bị thiếu ở cuối khai báo hàm trong một trong các tệp tiêu đề của tôi, vì lý do tôi gặp phải rất nhiều lỗi, điều này khiến tôi hơi lo lắng. Tôi googled và thấy thread này đã giúp tôi rất nhiều.

Vì vậy, việc khai báo đúng chức năng là cần thiết.

0

Nếu bạn đang sử dụng trình soạn vim, bạn có thể dễ dàng tìm thấy thiếu dấu chấm phẩy bằng cách gõ:

/[^;]\s*$ 

... và sau đó nhảy lên/xuống (với N/n), cho đến khi đường có vấn đề được tìm thấy.

Các vấn đề liên quan