數據結構實現中遇到的問題

1.如果要將一個類單獨定義在一個文件中,而在另一個文件中使用它,有以下幾種方法。

<1>如果類的聲明在.h文件中,而類的實現.cpp文件中聲明該.h文件,那麼在要使用這個類的文件中聲明該類的.cpp實現文件,就能夠使用了。即#include “**.cpp”。

<2>如果類的聲明在.h文件,而類的實現.cpp文件中沒有聲明該.h文件,那麼在使用的時候.h和.cpp文件就都要進行聲明

<3>也可以將類的聲明和實現都寫在.h文件裏,這樣直接包括.h文件也可以用。那麼同樣也可以把類的聲明和實現都寫在.cpp文件中,直接包括.cpp文件也可以使用。

<4>我的數據結構實現中有具體的例子。

<5>一開始我的困惑是將類的聲明寫到.h文件,實現寫到.cpp文件,結果聲明時只聲明.h文件發現出現undefined reference to ~~~這個應該就是沒有把它們整體一起編譯的原因。因爲.h文件中沒有與.cpp有關聯的操作,那麼它的實現也就沒有被編譯進去。而如果要建工程的話,我還沒建過工程,就不知道了。

//保持間隔

2.#ifndef和#define的問題

如果要將類的聲明單獨寫在.h文件中,那麼就要防止在一個文件中,重複聲明這個類兩次。怎麼樣會重複聲明呢。

比如說我的一個類A的聲明寫在A.h文件中,實現寫在A.cpp文件中,並且A.cpp文件裏已經聲明瞭A.h文件,而我要在另一個文件test.cpp中調用A類,而我卻同時聲明瞭A.cpp和A.h。這樣的話就會報錯,因爲在A.cpp中include的A.h已經聲明瞭A類,而A.h又聲明瞭一次。

當然實際發生的情況可能不是這種,而是那種類很多關係又比較複雜,相互調用來調用去的,就可能出現這種情況。那麼就可以通過條件包含來避免。

可以將這個看成是一個普通的條件語句,還是以A類爲例。

#ifndef A_H

#define A_H
class A
{
 ……
};

#endif

實際上就是,如果我沒有define一個叫啥啥啥的,那麼我就要define這個啥啥啥,然後就順序執行下去,class A,完成了A類的聲明,然後endif。
而如果我已經聲明過這個文件了,那麼我因爲第一次因爲沒有define那個啥啥啥,我就執行下去define了那個啥啥啥,而這次這個文件又被include的時候,我再執行ifndef啥啥啥,因爲我啥啥啥已經被define了,所以就不執行直接endif了。

而那個啥啥啥,就是一個標識符,本身是什麼都可以,但是一般就把.h文件全部大寫,‘.’換成‘_’。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章