Các mảnh đơn giản sau đây của mã biên dịch, mặc dù tôi không hiểu tại sao:C++ Chuyển Tuyên bố Lớp Trong Lớp
class C {
class B;
class A {
B getB() { return B(); }
};
class B {
};
};
int main(int, char**)
{
return 0;
}
Nếu tôi sau đó nhận xét ra các "class C
" công cụ, do đó việc kê khai về phía trước của B
, định nghĩa về A
và định nghĩa của B
không còn lồng trong một lớp, mã số không biên dịch, vì B
là của một loại không đầy đủ:
main.cpp: In member function 'B A::getB()':
main.cpp:6: error: return type 'struct B' is incomplete
main.cpp:6: error: invalid use of incomplete type 'struct B'
main.cpp:3: error: forward declaration of 'struct B'
tôi underst và nó có nghĩa là gì đối với một loại không đầy đủ, cụ thể là nó chưa được định nghĩa và do đó trình biên dịch không thể biết bao nhiêu không gian để phân bổ cho nó. Nhưng tại sao là B
không được coi là không đầy đủ trong mã ở trên, trong đó A
và B
đều được khai báo và xác định bên trong của C
?
Tuyệt vời, cảm ơn bạn đã dọn dẹp. Câu hỏi cụ thể này là lớp ['result'] (http://pqxx.org/devprojects/libpqxx/doc/stable/html/Reference/) của libpqxx, lớp này có các lớp' tuple' và 'field' lồng nhau, trong 'tuple' xây dựng một' trường' trong một trong các cơ quan chức năng của nó (cụ thể là, dòng 183) – villapx