我的理解是,friend
如果使用说明符,则声明也可以用作类的前向声明class
,如下例所示:
class A
{
friend class B;
B* b;
};
class B {};
int main() {}
但是,g++(4.6.3 和 4.7.0)给了我以下错误(g++-4.7 应该支持扩展的朋友声明),这是没有前向声明的预期:
main.cpp:6:2:错误:“B”没有命名类型
为了确认我对friend class B;
应该作为前向声明的期望,我找到了这个答案和这个答案,但都不是决定性的(或者我至少不能从他们那里得出很多结论)所以我试图咨询 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
}
根据我对第三个声明的阅读, myfriend class B
应该是一个详细的类型说明符,声明一个新的 class。
我刚刚开始理解官方标准措辞,所以我一定遗漏了一些东西。我有什么误解?