Bạn có thể chuyển tiếp tuyên bố
- Templates, trong đó có chuyên ngành phần
- chuyên ngành Explicit
- lớp lồng nhau (điều này bao gồm cấu trúc, "thật" các lớp học và các đoàn thể)
- lớp Non-lồng nhau và địa phương
- Biến ("extern int a;")
- Chức năng
Nếu bằng "tuyên bố chuyển tiếp", bạn hoàn toàn có nghĩa là "khai báo nhưng không xác định", bạn cũng có thể chuyển tiếp các hàm thành viên khai báo. Nhưng bạn không thể redeclare chúng trong định nghĩa lớp học của họ một khi họ được tuyên bố. Bạn không thể chuyển tiếp kê khai liệt kê. Tôi không chắc mình có bỏ lỡ thứ gì không. Vui lòng lưu ý rằng tất cả các khai báo chuyển tiếp được liệt kê ở trên, ngoại trừ các chuyên môn từng phần và rõ ràng, cần khai báo sử dụng tên không đủ tiêu chuẩn và các hàm thành viên và các lớp lồng nhau chỉ có thể được khai báo nhưng không được định nghĩa trong định nghĩa lớp của chúng.
class A { };
class A::B; // not legal
namespace A { }
void A::f(); // not legal
namespace A { void f(); } // legal
class B { class C; }; // legal
class B::C; // declaration-only not legal
class D { template<typename T> class E; };
template<typename T> class D::E<T*>; // legal (c.f. 14.5.4/6)
Nguồn
2010-09-26 21:17:17
Tại sao bạn không thử và xem? –
enum sẽ có khả năng chuyển tiếp khai báo trong C++ 0x. và bạn không thể "một phần" chuyển tiếp các lớp khai báo (khai báo trước các phương thức) – erjot
Tôi có xu hướng đặt các enums được nhập vào trong các lớp "xác định" chúng. Sau đó tôi chạy vào các vấn đề trình biên dịch "phụ thuộc vòng tròn" với hai lớp tham khảo các enums của nhau. – franji1