Tôi tương đối mới với C++, và tôi đã nhìn rất nhiều cho một câu trả lời cho điều này nhưng tôi không bao giờ có một câu trả lời thỏa mãn.Lớp bên trong truy cập lớp bên ngoài
Giả sử tôi có cấu trúc được gọi là FSM
. Cuối cùng trong mã của tôi, có thể tạo nhiều phiên bản FSM
. Một trong những thuộc tính của FSM
là int X
không phải là tĩnh, mỗi trường hợp của FSM
phải có giá trị riêng cho X
.
Bây giờ, một trong những thuộc tính FSM
's là một cấu trúc submachine
mà cần phải đọc giá trị của X
như thế này:
struct FSM
{
public:
int x;
int getX(){return x;}
struct submachine
{
void onentry() {int g = getX();};
};
};
này cung cấp cho các lỗi sau:
Error: 'FSM::getX' : illegal call of non-static member function
Câu hỏi của tôi là , submachine
là thành viên của FSM
, vì vậy không nên truy cập vào các phiên bản cục bộ của tất cả các thuộc tính của FSM
? Và nếu không, khi chúng tôi tạo một thể hiện của FSM
, chúng tôi sẽ không tạo một phiên bản của tất cả các thành viên của nó, tức là submachine
? Và nếu có, thì tại sao chúng ta cần phải tạo ra một đối tượng mà nhu cầu onentry()
?
Tôi giả định trình biên dịch là chính xác, vì vậy tôi cũng muốn biết nếu có cách nào để thực hiện công việc này. LƯU Ý: Thật không may, các trường hợp của các cấu trúc bên trong (submachine
) được khởi tạo khi một sự kiện được gọi và do đó tôi chỉ có thể xác định loại và không thể khởi tạo các đối tượng cho chúng trong FSM
.
nếu có cách nào tôi hoàn thành những gì tôi muốn thực hiện? – Kam
Downvoter: quan tâm để chia sẻ? –
(Xin lỗi vì sự chậm trễ, đã tìm thấy liên kết). Các lớp lồng nhau là các thành viên và có thể truy cập lớp bên ngoài giống như bất kỳ thành viên nào khác, xem [DR 45] (http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#45), một phần của tiêu chuẩn từ năm 2003 –