1.hpp文件
成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站的關(guān)注點(diǎn)不是能為您做些什么網(wǎng)站,而是怎么做網(wǎng)站,有沒有做好網(wǎng)站,給成都創(chuàng)新互聯(lián)一個(gè)展示的機(jī)會(huì)來(lái)證明自己,這并不會(huì)花費(fèi)您太多時(shí)間,或許會(huì)給您帶來(lái)新的靈感和驚喜。面向用戶友好,注重用戶體驗(yàn),一切以用戶為中心。hpp文件可以使用template函數(shù)和class靜態(tài)函數(shù)(不含靜態(tài)成員)
a)不可包含全局對(duì)象和全局函數(shù)
由于hpp本質(zhì)上是作為.h被調(diào)用者include,所以當(dāng)hpp文件中存在全局對(duì)象或者全局函數(shù),而該hpp被多個(gè)
調(diào)用者include時(shí),將在鏈接時(shí)導(dǎo)致符號(hào)重定義錯(cuò)誤。要避免這種情況,需要去除全局對(duì)象,將全局函數(shù)封
裝為類的靜態(tài)方法。
b)類之間不可循環(huán)調(diào)用
在.h和.cpp的場(chǎng)景中,當(dāng)兩個(gè)類或者多個(gè)類之間有循環(huán)調(diào)用關(guān)系時(shí),只要預(yù)先在頭文件做被調(diào)用類的聲明
即可,如下:
class B;
class A{
public:
void someMethod(B b);
};
class B{
public:
void someMethod(A a);
};
在hpp場(chǎng)景中,由于定義與實(shí)現(xiàn)都已經(jīng)存在于一個(gè)文件,調(diào)用者必需明確知道被調(diào)用者的所有定義,而不能等到cpp
中去編譯。因此hpp中必須整理類之間調(diào)用關(guān)系,不可產(chǎn)生循環(huán)調(diào)用。同理,對(duì)于當(dāng)兩個(gè)類A和B分別定義在各自的
hpp文件中,形如以下的循環(huán)調(diào)用也將導(dǎo)致編譯錯(cuò)誤:
//a.hpp#include "b.hpp"class A{
public:
void someMethod(B b);
};
//b.hpp#include "a.hpp"class B{
public:
void someMethod(A a);
}
c)不可使用靜態(tài)成員
靜態(tài)成員的使用限制在于如果類含有靜態(tài)成員,則在hpp中必需加入靜態(tài)成員初始化代碼,當(dāng)該hpp被多個(gè)文檔include時(shí),將產(chǎn)生符號(hào)重定義錯(cuò)誤。
2.
#ifndef MATH_HPP_
#define MATH_HPP_
//內(nèi)容
#endif
3.多個(gè)類互相包含使用指針,不要用成員。
網(wǎng)站標(biāo)題:C++多目錄多文件編譯技巧-創(chuàng)新互聯(lián)
當(dāng)前路徑:http://www.rwnh.cn/article46/ichhg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、商城網(wǎng)站、網(wǎng)站排名、App設(shè)計(jì)、網(wǎng)站建設(shè)、小程序開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容