我的理解是一個friend
宣言還可以作爲一個向前聲明爲一類,如果使用了class
符,如下例所示:朋友申報不能向前聲明
class A
{
friend class B;
B* b;
};
class B {};
int main() {}
然而,G ++(4.6。 3和4.7.0)給了我下面的錯誤(G ++ - 4.7應該有extended friend declarations支持),這是沒有預先聲明預計:
main.cpp:6:2: error: ‘B’ does not name a type
在試圖確認我的期望是,friend class B;
應該作爲前向聲明,我發現this answer和this answer,但都不是結論性的(或者我至少不能從他們得出多少結論),所以我試圖去諮詢C++ 11標準並發現這個例子:
class X2 {
friend Ct; // OK: class C is a friend
friend D; // error: no type-name D in scope
friend class D; // OK: elaborated-type-specifier declares new class
}
根據我對第三個聲明的閱讀,我的friend class B
應該是一個闡述類型說明符,聲明一個新類。
我剛剛開始瞭解官方標準的措辭,所以我必須錯過一些東西。我誤解了什麼?
不,這真的是':: B':HTTP ://ideone.com/bEgZrq。請注意「內部封閉*非類*範圍」。 – aschepler
@ K-ballo所以當它說宣佈一個新的類時,這僅僅是爲了朋友聲明的目的,而不是爲了其他任何好處? – JaredC
@JaredC:這聽起來對我來說很合適...... –