[問題] template class

看板C_and_CPP (C/C++)作者 (ooxx)時間14年前 (2012/02/05 13:42), 編輯推噓1(105)
留言6則, 2人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) C++(DEV C++) 問題(Question): 關於template class的用法 由於對物件導向不熟(純C起家) 有語法誤用請海含 錯誤結果(Wrong Output): 東西太多 真的要的話 我再補 程式碼(Code):(請善用置底文網頁, 記得排版) 這邊先問一個問題 看到不少書的範例template class分開寫在標頭檔裡 可是小弟只是要隨便寫個二元樹結構 直接寫在含main的cpp裡應該沒問題吧? 如果上述沒問題的話 以下開始敘述程式碼(書的範例) template<class B>class tree;//前向宣告 template<class T> class tree_node{ friend class tree<T>; private: T data; tree_node<T> *left; tree_node<T> *right; }; template<class B> class tree{ public: tree(B data){ root.data=data; root.left=NULL; root.right=NULL; } tree(){ } ~tree(){ } private: tree_node<B> *root; }; 這段是在main前面 main裡面 的資料輸入 就不多講解 應該是正常的 main裡 用一個名為data的變數(char)當資料暫存 而問題點是在使用了以下這行(root為第一次宣告,想使用建構子建立物件) tree<char> root(data); 補充說明(Supplement): 個人感覺是我對template語法不熟 煩請板上先進指教 建構子那裏 改成root->data=data;(也就是.改成->即可編譯正常) 但仍想請教編譯失敗的理由 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.164.150.214 ※ 編輯: seedpk5079 來自: 218.164.150.214 (02/05 13:42) ※ 編輯: seedpk5079 來自: 218.164.150.214 (02/05 13:48)

02/05 13:47, , 1F
問題不在 template 而是你的 tree::root 沒有指向合法空間
02/05 13:47, 1F

02/05 13:48, , 2F
另外這個變數是指標所以你應該要使用 ->
02/05 13:48, 2F
我真的忘了是指標了 剛剛是隨便把.改成->試試看 感謝解答 ※ 編輯: seedpk5079 來自: 218.164.150.214 (02/05 13:49)

02/05 13:49, , 3F
又如果你是想把 root 元素直接收在 tree 裡的話那就別用指標
02/05 13:49, 3F

02/05 17:07, , 4F
編譯失敗的理由就是 . 只有物件能用, -> 只有物件指標能用
02/05 17:07, 4F

02/05 17:07, , 5F
先想清楚你用的是哪種
02/05 17:07, 5F

02/05 17:08, , 6F
純 C 起家連令一個指標出來會指向一個 garbage 都不知道??
02/05 17:08, 6F
文章代碼(AID): #1FBXQhR3 (C_and_CPP)
文章代碼(AID): #1FBXQhR3 (C_and_CPP)