Re: [问题] A类别的函式内 呼叫 A类别函式 出错

楼主: Caesar08 (Caesar)   2016-06-02 15:52:00
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都写不好的网志,没有看的必要
作者: hunandy14 (Charlott.HonG)   2016-06-02 17:08:00
受益良多,一直想问这些问题,又不知道怎么问我试着练习一下档案在,差不多就是样子吗无副档名写在一起 https://goo.gl/xoQ4Xw分开写在.cpp https://goo.gl/7fch9z想再问的,我如果写在同一个档案 定义跟宣告 要分开吗你说[main function都写不好] 具体是什么意思呢想知道~还有一个奇怪的问题XD 为什么要把.h分开呢 直接引.cpp
作者: bibo9901 (function(){})()   2016-06-02 17:22:00
在同一个档案里可分可不分 看你的需要分开纯粹是一个档案太多行了不好看 #include其实就是复制贴上 和你写在同一个档案一样意思
作者: EdisonX (卡卡兽)   2016-06-02 19:47:00
受教了 推一个。

Links booklink

Contact Us: admin [ a t ] ucptt.com