2012-07-19 42 views
6
struct mystruct 
{ 
    int i; 
    double f; 
} ; 

typedef mystruct myotherstruct; 

//the other .cpp file 
struct mystruct; //OK,this is a correct forward declaration. 
struct myotherstruct; // error C2371(in vc2k8): 'myotherstruct' : redefinition; different basic types 

Xin chào tất cả. Tại sao tôi không thể chuyển tiếp tuyên bố của tôi?khai báo typedef loại

+1

http://stackoverflow.com/questions/804894/forward-declaration-of-a-typedef-in-c – Jeeva

Trả lời

1

Các myotherstruct nhận dạng không phải là một thẻ struct, nó là một cái tên loại trong quyền riêng của mình. Bạn sử dụng nó mà không có từ khóa struct. Sau khi được xác định, không thể sử dụng lại tên này cho thẻ struct. Trong ví dụ của bạn, bạn không chuyển tiếp khai báo loại myotherstruct, bạn đang chuyển tiếp tuyên bố struct bằng thẻ myotherstruct, điều này sẽ cho bạn lỗi vì tên myotherstruct đã được sử dụng cho số typedef.

+0

Thẻ cấu trúc tương đương với tên loại? bí mật m; –

+0

@LeonhartSquall Thật kỳ lạ, câu trả lời cho câu hỏi này phụ thuộc vào việc đây là C++ hay C: trong C++, thẻ của cấu trúc có thể được sử dụng như một tên không có 'typedef', trong khi trong C bạn phải' gõ' trước. – dasblinkenlight

+0

Là thẻ cấu trúc tương đương với tên loại? khi tôi sử dụng bí mật để xác định một đối tượng: mystruct m; Tôi luôn nghĩ rằng bí ẩn là một tên kiểu. Và tôi không bao giờ biết nó là một thẻ struct. Làm thế nào tôi có thể gạch dưới thẻ struct. –

1

Bạn không thể chuyển tiếp khai báo typedefs mà không cần khai báo trước số struct được đánh máy. Bạn nên đầu tiên về phía trước khai báo struct và sau đó typedef

struct mystruct; 
typedef mystruct myotherstruct; 
Các vấn đề liên quan