Re: [問題] A類別的函式內 呼叫 A類別函式 出錯

看板C_and_CPP作者 (Caesar)時間9年前 (2016/06/02 15:52), 9年前編輯推噓2(209)
留言11則, 3人參與, 最新討論串2/2 (看更多)
class A; 這是class declaration template<class>class B; 這也是class declaration class C { int i; public: void test(); }; 這是class definition 其中void test()是member function declaration template<class T> class D { T i; public: void test(); }; 這也是class definition 其中void test()也是member function declaration void C::test(){} 這是member function definition template<class T> void D<T>::test(){} 這也是member function definition 非class template的class(如A與C) 會將member functiondeclarationdefinition分開 declaration放在.h definition放在.cpp 而class template的class(如B與D) 有2種做法(第3種是export,但把這東西忘了吧) 一種是把member functiondeclarationdefinition放在一起 例如 //.hpp or .hxx or anything but not .h template<class T> class E { T i; public: void test(){} }; 然後為了說明這不是一般的.h檔案,所以會把這檔案取成別的名字 常見的有.hpp.hxx或乾脆沒有副檔名(如iostream) 所以這時候,就不需再有一個.cpp檔案了 另一種做法是按照傳統,把member functiondeclarationdefinition分開 但是在.h檔案(或.hpp或其他的)裡面include該member function definition的檔案 例如 //.h template<class T> class F { T i; public: void test(); }; #include"your/member/function/definition/file.cpp" //.cpp template<class T> void F<T>::test(){} 然而你的方法卻是include .cpp(然後裡面在include .h) 不是不能這麼做 只是當別人要用你的檔案時,他會以為只要include .h就好 然後就發現compile不過,之後才知道原來你用的方式跟別人不一樣 我以前都用第二種做法,但後來發現用第一種做法比較好 (用第二種容易讓別人搞混,以為compile時也要把.cpp放進去,結果就error了) 還有,你給的那連結,我看一眼就關掉了 連main function都寫不好的網誌,沒有看的必要 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.164.45.82 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1464853922.A.01E.html

06/02 17:08, , 1F
受益良多,一直想問這些問題,又不知道怎麼問
06/02 17:08, 1F

06/02 17:08, , 2F
我試著練習一下檔案在,差不多就是樣子嗎
06/02 17:08, 2F

06/02 17:11, , 3F
無副檔名寫在一起 https://goo.gl/xoQ4Xw
06/02 17:11, 3F
差不多,但是別忘了include guard

06/02 17:11, , 4F
分開寫在.cpp https://goo.gl/7fch9z
06/02 17:11, 4F

06/02 17:12, , 5F
想再問的,我如果寫在同一個檔案 定義跟宣告 要分開嗎
06/02 17:12, 5F
如果你指的是member function,那通常不會再分開,因為很麻煩(需要多寫code) 但如果你指的是非member function,那這完全是看你要不要分開 (不過某些情況下,你不分開就過不了compile) 總結,要不要分開就是看你高興啦(除非有compile上的問題)

06/02 17:15, , 6F
你說[main function都寫不好] 具體是什麼意思呢想知道~
06/02 17:15, 6F
你去查c++ main function該怎麼寫就知道了 http://lmgtfy.com/?q=c%2B%2B+main+function

06/02 17:16, , 7F
還有一個奇怪的問題XD 為什麼要把.h分開呢 直接引.cpp
06/02 17:16, 7F

06/02 17:22, , 8F
在同一個檔案裡可分可不分 看你的需要
06/02 17:22, 8F

06/02 17:23, , 9F
分開純粹是一個檔案太多行了不好看 #include其實就是
06/02 17:23, 9F

06/02 17:23, , 10F
複製貼上 和你寫在同一個檔案一樣意思
06/02 17:23, 10F

06/02 19:47, , 11F
受教了 推一個。
06/02 19:47, 11F
※ 編輯: Caesar08 (1.164.45.82), 06/02/2016 21:33:36
文章代碼(AID): #1NJ-MY0U (C_and_CPP)
文章代碼(AID): #1NJ-MY0U (C_and_CPP)