作者ric2k1 (Ric)
看板EE_DSnP
标题Re: [问题] compile的问题
时间Mon Dec 27 23:40:24 2010
先说一些 typos... 应该是笔误吧?
1. class A; // 少了分号
2. class C{ // 少了分号
};
3. friend class A; // 要说明 A 是个 class
※ 引述《BBSealion (海狮)》之铭言:
: 简略程式码如下:
: class A // forward declaration
: class C{
: ...
: friend A;
: friend A::B;
: }
: class A{
: class B{
: };
: };
:
: 想请问一下,为什麽这样compile不会过啊?
: 会跟我argue红色那行 : expected type-name
你的意思是让 class A 与 class A::B 可以直接 access class C 的 provate data 吧?
那可以直接拿掉 "friend class A::B;" 那行,
因为 class A "里面" 本来就可以直接 access class C 了!
像这样:
class A; // forward declaration
class C{
friend class A;
// friend class A::B;
int _i;
};
class A{
public:
class B{
void f() { C c; c._i = 10; }
};
};
int main()
{
C c;
}
: 但把class A、C都改成 templete 型态就会过了
: 否则我就一定要把class C放到 class A下面,compile才会过
: 感觉templete class才会过挺没道理的?
: 这边compiler语法这样规定的理由是什麽呢?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.36.54.107