tôi đã biên soạn đoạn mã sau:loại Incomplete có tên trong tên lồng nhau specifier
class B;
class A {
A();
friend A B::newAObject();
};
class B {
friend A::A();
public:
A newAObject();
};
Điều này có vẻ lạ, nhưng ý tưởng là để có một lớp A
mà chỉ có thể được tạo ra bởi một đối tượng kiểu B
(ai có lẽ sẽ là một singleton).
Vấn đề là tôi đã tạo phụ thuộc vòng tròn giữa các đối tượng này. A
phải được xác định trước B
và B
phải được xác định trước A
. Rõ ràng về phía trước tuyên bố B
là không đủ tốt, B
thực sự phải được xác định đầy đủ trước A
(và ngược lại).
Làm cách nào để giải quyết vấn đề này?
Chỉnh sửa: lỗi thực tế là: Loại không đầy đủ 'B' được đặt tên trong bộ chỉ định tên lồng nhau.
Lưu ý: có một bài đăng tương tự như thế này tại đây: Error: incomplete type used in nested name specifier, nhưng nó rất nhiều templatized và điều đó gây nhầm lẫn cho tôi, do đó bài đăng này.
Hơi lạ khi tạo một phương thức đơn lẻ làm bạn. Bạn có chắc chắn bạn không muốn làm cho cả lớp một người bạn? –
Tôi không biết rằng điều đó là có thể. Làm thế nào là nó được thực hiện? Tôi chỉ cần viết 'lớp người bạn B' bên trong' A' và 'lớp người bạn A' bên trong' B'? – anthropomorphic
Đúng vậy ... –