[問題] 繼承 class template,看不到data member

看板C_and_CPP作者 (眠月)時間11年前 (2013/03/01 09:22), 編輯推噓10(10017)
留言27則, 13人參與, 最新討論串1/1
剛剛發現我有觀念不清楚的地方,請教一下各位前輩 下面左右兩邊的差異,只在於 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)

03/01 09:36, , 1F
我覺得undeclared的是那個T,在class Y隨便將T改成int float
03/01 09:36, 1F

03/01 09:36, , 2F
這樣子就沒有undeclared的東西了
03/01 09:36, 2F

03/01 09:42, , 3F
等一下 真的怪怪的 我在class Y前面宣告新的 template T1
03/01 09:42, 3F

03/01 09:43, , 4F
像 template <typename T1> class Y : public X<T1>
03/01 09:43, 4F

03/01 09:43, , 5F
裡頭的n一樣不能存取 這真的怪怪的 C++ 的動態功能不見了
03/01 09:43, 5F

03/01 09:44, , 6F
class Y 不是模板呀 xD
03/01 09:44, 6F

03/01 09:46, , 7F
只能用 X<T>::n 讓他晚一點再找這個name了
03/01 09:46, 7F

03/01 09:46, , 8F
知道了 C++ 繼承模板的Class 不能自己也當模板
03/01 09:46, 8F

03/01 09:46, , 9F
所以這裡的Class Y一定要指定出T是什麼形態 學了一課
03/01 09:46, 9F

03/01 09:47, , 10F
= =" 樓上是怎麼得出這結論的
03/01 09:47, 10F

03/01 09:49, , 11F
根據自己測試的結果... (心虛貌)
03/01 09:49, 11F

03/01 10:12, , 12F
非模板可以繼承模板嗎@@? http://codepad.org/lEIWiOp5
03/01 10:12, 12F

03/01 10:42, , 13F

03/01 10:44, , 14F
03/01 10:44, 14F

03/01 10:54, , 15F
Y的T如果沒指定或不是template我看不出來為什麼要過
03/01 10:54, 15F

03/01 11:11, , 16F
effective c++ rule 43
03/01 11:11, 16F

03/01 12:45, , 17F
樓上講清楚點
03/01 12:45, 17F

03/01 13:42, , 18F
linotwo 大那篇說得很清楚..
03/01 13:42, 18F

03/01 18:18, , 19F
看來大家年紀都大了,我 30 以後也是開始記不太住一些事
03/01 18:18, 19F

03/02 01:11, , 20F
唉呀,我程式碼打錯了,Y 也是 template,我修一下
03/02 01:11, 20F
※ 編輯: yoco315 來自: 182.235.89.169 (03/02 01:11)

03/02 03:50, , 21F
G++ 那邊 STL 的寫法 也都會用 parent <T>::member 寫法
03/02 03:50, 21F

03/02 03:51, , 22F
上次在繼承 STL 的時候遇過這個問題
03/02 03:51, 22F

03/02 04:52, , 23F
ADF 謝啦,可惡,我的 Effective 太舊了 XD
03/02 04:52, 23F

03/02 04:52, , 24F
竟然要到第三版才有這個.. 嗚嗚
03/02 04:52, 24F

03/02 10:15, , 25F
wwww
03/02 10:15, 25F

03/02 18:59, , 26F
看來要去買 Effective 第三版
03/02 18:59, 26F

03/02 23:26, , 27F
原來是沒買新版 XD
03/02 23:26, 27F
文章代碼(AID): #1HC0AzAn (C_and_CPP)