下面一段簡單的代碼編譯,但我不明白爲什麼:C++轉發聲明類中的類
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'
我underst以及類型不完整意味着什麼,即它尚未被定義,因此編譯器不可能知道爲它分配多少空間。但爲什麼B
在上面的代碼中不被認爲是不完整的,其中A
和B
都是在C
內部聲明和定義的?
太棒了,謝謝你清理那個。引發這個問題的是libpqxx的['result'](http://pqxx.org/devprojects/libpqxx/doc/stable/html/Reference/)類,它有嵌套的'tuple'和'field'類,其中'tuple'在它的一個函數體中構造了一個'field'(即第183行) – villapx