看板 C_and_CPP 關於我們 聯絡資訊
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
hunandy14: 受益良多,一直想問這些問題,又不知道怎麼問 06/02 17:08
hunandy14: 我試著練習一下檔案在,差不多就是樣子嗎 06/02 17:08
hunandy14: 無副檔名寫在一起 https://goo.gl/xoQ4Xw 06/02 17:11
差不多,但是別忘了include guard
hunandy14: 分開寫在.cpp https://goo.gl/7fch9z 06/02 17:11
hunandy14: 想再問的,我如果寫在同一個檔案 定義跟宣告 要分開嗎 06/02 17:12
如果你指的是member function,那通常不會再分開,因為很麻煩(需要多寫code) 但如果你指的是非member function,那這完全是看你要不要分開 (不過某些情況下,你不分開就過不了compile) 總結,要不要分開就是看你高興啦(除非有compile上的問題)
hunandy14: 你說[main function都寫不好] 具體是什麼意思呢想知道~ 06/02 17:15
你去查c++ main function該怎麼寫就知道了 http://lmgtfy.com/?q=c%2B%2B+main+function
hunandy14: 還有一個奇怪的問題XD 為什麼要把.h分開呢 直接引.cpp 06/02 17:16
bibo9901: 在同一個檔案裡可分可不分 看你的需要 06/02 17:22
bibo9901: 分開純粹是一個檔案太多行了不好看 #include其實就是 06/02 17:23
bibo9901: 複製貼上 和你寫在同一個檔案一樣意思 06/02 17:23
EdisonX: 受教了 推一個。 06/02 19:47
※ 編輯: Caesar08 (1.164.45.82), 06/02/2016 21:33:36