Следующий простой фрагмент кода компилируется, хотя я не понимаю, почему:
class C {
class B;
class A {
B getB() { return B(); }
};
class B {
};
};
int main(int, char**)
{
return 0;
}
Если я затем прокомментирую материал "class C
", так что объявление вперед B
, определение A
и определение B
больше не вложены в класс, код делает не компилируется, так как B
имеет неполный тип:
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'
Я понимаю, что это означает, что тип является неполным, а именно, что он еще не определен, и поэтому компилятор не может знать, сколько места выделяется для него. Но почему B
не считается неполным в коде выше, где A
и B
объявлены и определены внутри C
?