Re: [問題] A類別的函式內 呼叫 A類別函式 出錯
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 function的declaration與definition分開
declaration放在.h
definition放在.cpp
而class template的class(如B與D)
有2種做法(第3種是export,但把這東西忘了吧)
一種是把member function的declaration與definition放在一起
例如
//.hpp or .hxx or anything but not .h
template<class T>
class E
{
T i;
public:
void test(){}
};
然後為了說明這不是一般的.h檔案,所以會把這檔案取成別的名字
常見的有.hpp或.hxx或乾脆沒有副檔名(如iostream)
所以這時候,就不需再有一個.cpp檔案了
另一種做法是按照傳統,把member function的declaration與definition分開
但是在.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
06/02 17:11, 3F
差不多,但是別忘了include guard
→
06/02 17:11, , 4F
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
06/02 17:15, 6F
→
06/02 17:16, , 7F
06/02 17:16, 7F
→
06/02 17:22, , 8F
06/02 17:22, 8F
→
06/02 17:23, , 9F
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
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):