2012-12-12 39 views
21

Tôi tự hỏi nếu nó có thể chuyển tiếp khai báo một enum được định nghĩa trong phạm vi lớp khác. Ví dụ, hãy xem xét những điều sau đây:C++ Chuyển tiếp khai báo lớp liệt kê vi phạm

//A.h 
class A 
{ 
public: 
    enum class type: unsigned long { /*some stuff*/ } 
}; 

Bây giờ, trong tiêu đề khác tôi muốn để chuyển tiếp tuyên bố 'loại' enum (giả sử lớp B dưới đây có một chức năng mà làm điều gì đó với A :: type)

//B.h 
enum A::type; //use of undefined type 'A' 

class B 
{ 
public: 
    UseTypeEnum(A::Type&); 
}; 

này không làm việc một trong hai:

//B.h 
class A; 
enum A::type; //still use of undefined type 

class B... 

không có vấn đề nếu enum được khai báo ở phạm vi toàn cầu trong Ah

Có cách nào để thực hiện việc này không?

+2

các bảng liệt kê phải được khai báo là thành viên tĩnh, bạn có chắc là bạn không thể viết chương trình bằng cách thoát khỏi khai báo chuyển tiếp enums không? –

+0

cho 'enum': http://stackoverflow.com/questions/2238170/forward-declaration-of-nested-enum –

Trả lời

15

Bạn không thể khai báo các loại lồng nhau bên ngoài định nghĩa lớp.

Nếu bạn cần sử dụng chúng bên ngoài lớp, bạn sẽ phải bao gồm định nghĩa lớp hoặc di chuyển chúng vào không gian tên.

+2

Phần buồn là khi nó về thư viện bên ngoài. – Predelnik

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