看板 C_and_CPP 關於我們 聯絡資訊
剛剛發現我有觀念不清楚的地方,請教一下各位前輩 下面左右兩邊的差異,只在於 X 是不是 template 不知道為什麼,左邊那個版本,編譯器跟我說 Y 裡面 n undeclared 無法存取 但是只要把 template 拿掉,就完全正常,是我漏掉規則了嗎?多謝。 template <typename T> ∣ class X { | class X { protected: | protected: int n; | int n; }; | }; | template <typename T> | class Y : public X<T> { | class Y : public X { void f() { n; } undeclared | void f() { n; } ok } | } -- To iterate is human, to recurse, divine. 遞迴只應天上有, 凡人該當用迴圈.   L. Peter Deutsch -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 182.235.89.169 ※ 編輯: yoco315 來自: 182.235.89.169 (03/01 09:23)
wemee:我覺得undeclared的是那個T,在class Y隨便將T改成int float 03/01 09:36
wemee:這樣子就沒有undeclared的東西了 03/01 09:36
wemee:等一下 真的怪怪的 我在class Y前面宣告新的 template T1 03/01 09:42
wemee:像 template <typename T1> class Y : public X<T1> 03/01 09:43
wemee:裡頭的n一樣不能存取 這真的怪怪的 C++ 的動態功能不見了 03/01 09:43
loveme00835:class Y 不是模板呀 xD 03/01 09:44
loveme00835:只能用 X<T>::n 讓他晚一點再找這個name了 03/01 09:46
wemee:知道了 C++ 繼承模板的Class 不能自己也當模板 03/01 09:46
wemee:所以這裡的Class Y一定要指定出T是什麼形態 學了一課 03/01 09:46
loveme00835:= =" 樓上是怎麼得出這結論的 03/01 09:47
wemee:根據自己測試的結果... (心虛貌) 03/01 09:49
lausai:非模板可以繼承模板嗎@@? http://codepad.org/lEIWiOp5 03/01 10:12
scwg: http://codepad.org/a1FcKKu5 03/01 10:42
linotwo:http://ppt.cc/rJDz 03/01 10:44
azureblaze:Y的T如果沒指定或不是template我看不出來為什麼要過 03/01 10:54
ADF:effective c++ rule 43 03/01 11:11
JingXD:樓上講清楚點 03/01 12:45
firose:linotwo 大那篇說得很清楚.. 03/01 13:42
tinlans:看來大家年紀都大了,我 30 以後也是開始記不太住一些事 03/01 18:18
yoco315:唉呀,我程式碼打錯了,Y 也是 template,我修一下 03/02 01:11
※ 編輯: yoco315 來自: 182.235.89.169 (03/02 01:11)
wowtiger:G++ 那邊 STL 的寫法 也都會用 parent <T>::member 寫法 03/02 03:50
wowtiger:上次在繼承 STL 的時候遇過這個問題 03/02 03:51
yoco315:ADF 謝啦,可惡,我的 Effective 太舊了 XD 03/02 04:52
yoco315:竟然要到第三版才有這個.. 嗚嗚 03/02 04:52
loveme00835:wwww 03/02 10:15
descent:看來要去買 Effective 第三版 03/02 18:59
tinlans:原來是沒買新版 XD 03/02 23:26