2009-03-03 28 views
50

Tôi đã làm việc trên bộ xử lý Cell và tôi đang cố gắng tạo một cấu trúc giữ spe_context_ptr_t, sẽ được sử dụng trong chuỗi để khởi chạy ngữ cảnh spe và cũng sẽ giữ con trỏ đến một thứ khác sẽ chuyển đến ngữ cảnh spu từ bên trong luồng (hiện tại tôi đang cố gắng làm cho nó trở thành một con trỏ chung, nhưng trong thực tế nó sẽ là một con trỏ tới một cấu trúc khác mà tôi đã định nghĩa). Khi tôi thử và biên dịch, tôi nhận được lỗi sau:Lỗi này có nghĩa là gì: "lỗi: danh sách định danh vòng loại dự kiến ​​trước 'type_name'"?

spu/../common.h:38: error: expected specifier-qualifier-list before 'spe_context_ptr_t' 

// here is the offending line(s) 

typedef struct _PTHREAD_BLOCK { 
    spe_context_ptr_t * context; // Error happens here 
    uintptr32_t args; 
} PTHREAD_BLOCK; 

Trả lời

61

Trình biên dịch không biết rằng spe_context_ptr_t là một loại. Kiểm tra xem typedef thích hợp có nằm trong phạm vi khi mã này được biên dịch hay không. Bạn có thể đã quên bao gồm tệp tiêu đề thích hợp.

+51

Trong trường hợp của tôi (đối với một dự án iPhone), vấn đề là tôi đã bao gồm các tiêu đề theo cách mà tôi nghi ngờ nó đã gây ra sự phụ thuộc vòng tròn. Tôi đã giải quyết nó bằng cách khai báo lớp trước trong tệp .h của tôi với tham số @class. Một khi tôi đã làm điều này, phụ thuộc vòng tròn đã được giải quyết và lỗi này đã biến mất. Chỉ cần lưu ý nếu có ai thấy điều này trong XCode/Obj-C. –

+0

cảm ơn, đã nhìn thấy nó sau khi phản ứng lại. Nhưng bạn có thể giải thích tại sao điều này là công trình và làm thế nào? – ymutlu

4

Tôi có cùng thông báo lỗi nhưng giải pháp khác.

Trình biên dịch phân tích tệp từ trên xuống dưới.

Hãy chắc chắn rằng một cấu trúc được định nghĩa trước khi sử dụng nó thành khác:

typedef struct 
{ 
    char name[50]; 
    wheel_t wheels[4]; //wrong, wheel_t is not defined yet 
} car_t; 

typedef struct 
{ 
    int weight; 
} wheel_t; 
+0

Sử dụng ví dụ để hiển thị giải pháp thay thế (hoặc còn) –

0

Bạn phải đặt tên struct của bạn như thế:

typedef struct car_t { 

    char 

    wheel_t 

} car_t; 
2

Đối với iPhone dự án ca cao-touch:

Tôi đã có vấn đề này và nhờ lời bình luận của Eric Farraro, tôi đã có thể giải quyết nó. Tôi đã nhập một lớp WSHelper.h trong nhiều lớp khác của tôi. Nhưng tôi cũng đã nhập một số lớp học tương tự trong WSHelper.h của tôi (thông tư như Eric đã nói). Vì vậy, để khắc phục điều này, tôi đã chuyển nhập từ tệp WSHelper.h của tôi sang tệp WSHelper.m của tôi vì chúng không thực sự cần thiết trong tệp .h.

0

tôi đã nhận nó với một vòng lặp nhập khẩu:

---FILE B.h 
#import "A.h" 
@interface B{ 
    A *a; 
} 
@end 

---FILE A.h 
#import "B.h" 
@interface A{  
} 
@end 
0

tôi đã có thể sắp xếp này bằng cách sử dụng sửa chữa Gorgando, nhưng thay vì di chuyển hàng nhập khẩu lập tức, tôi nhận xét từng ra cá nhân, xây dựng ứng dụng, sau đó thay đổi nội dung phù hợp cho đến khi tôi loại bỏ chúng.

0

@simpleBob

---FILE B.h 
#import "A.h" 
@interface B{ 
    A *a; 
} 
@end 

---FILE A.h 

@class B; 

@interface A{  
} 
@end 

mã trên đã giúp tôi sắp xếp nó ra. Ai đó có thể giải thích những gì đang xảy ra ở đây?

-1

lỗi này về cơ bản xuất hiện khi bạn sử dụng đối tượng trước khi sử dụng.

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