作者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