看板 EE_DSnP 關於我們 聯絡資訊
先說一些 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