相关疑难解决方法(0)

我什么时候可以使用前瞻性声明?

我正在寻找允许在另一个类的头文件中进行类的前向声明的定义:

我是否允许为基类,作为成员持有的类,通过引用传递给成员函数的类等执行此操作?

c++ c++-faq forward-declaration

588
推荐指数
7
解决办法
23万
查看次数

C++中的朋友范围

如果我有三个班级,A,B,C.A和B是朋友(双向).此外,B和C是朋友(双向).A有一个指向B的指针,B有一个指向C的指针.为什么A不能通过指针访问C的私有数据?

只是为了澄清:这是一个纯粹的理论C++语言问题,而不是设计建议问题.

c++ friend

17
推荐指数
2
解决办法
8514
查看次数

朋友宣言没有向前宣布

我的理解是,friend如果使用了class说明符,声明也可以作为类的前向声明,如下例所示:

class A
{
    friend class B;
    B* b;
};

class B {};

int main() {}
Run Code Online (Sandbox Code Playgroud)

但是,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-speci?er declares new class
}
Run Code Online (Sandbox Code Playgroud)

基于我对第三个声明的阅读,我friend class B应该是一个精心设计的类型说明符,声明一个新的类.

我刚刚开始理解官方的标准措辞,所以我必须遗漏一些东西.我有什么误会?

c++ c++11

7
推荐指数
2
解决办法
2678
查看次数

标签 统计

c++ ×3

c++-faq ×1

c++11 ×1

forward-declaration ×1

friend ×1