久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

inline函數(shù)必須在頭文件中定義嗎?

 torony 2018-03-27

前不久在寫代碼的時(shí)候遇到一個(gè)link錯(cuò)誤,,代碼的原型如下所示,,基本就是定義了一個(gè)基類和派生類,在派生類的一個(gè)成員函數(shù)中用到了基類定義的一個(gè)內(nèi)聯(lián)函數(shù),。

  1. // base.h  
  2. class Base  
  3. {  
  4. protected:  
  5.    void fun();  
  6. };  
  7.   
  8. // base.cpp  
  9. #include "base.h"  
  10. inline void Base::fun()  
  11. {}  
  12.   
  13. // derived.h  
  14. #include "base.h"  
  15. class Derived: public Base  
  16. {  
  17. public:  
  18.    void g();  
  19. };  
  20.   
  21. // derived.cpp  
  22. void Derived::g()  
  23. {  
  24.    fun(); //VC2008: error LNK2019: unresolved external symbol  
  25. }  
  1. // base.h  
  2. class Base  
  3. {  
  4. protected:  
  5.    void fun();  
  6. };  
  7.   
  8. // base.cpp  
  9. #include "base.h"  
  10. inline void Base::fun()  
  11. {}  
  12.   
  13. // derived.h  
  14. #include "base.h"  
  15. class Derived: public Base  
  16. {  
  17. public:  
  18.    void g();  
  19. };  
  20.   
  21. // derived.cpp  
  22. void Derived::g()  
  23. {  
  24.    fun(); //VC2008: error LNK2019: unresolved external symbol  
  25. }  

寫這個(gè)內(nèi)聯(lián)函數(shù)的時(shí)候也沒細(xì)想,,結(jié)果違反了inline函數(shù)的要求。所謂內(nèi)聯(lián)函數(shù),,就是編譯器將函數(shù)定義({...}之間的內(nèi)容)在函數(shù)調(diào)用處展開,,藉此來免去函數(shù)調(diào)用的開銷。如果這個(gè)函數(shù)定義在頭文件中,,所有include該頭文件的編譯單元都可以正確找到函數(shù)定義,。然而,如果內(nèi)聯(lián)函數(shù)fun()定義在某個(gè)編譯單元A中,,那么其他編譯單元中調(diào)用fun()的地方將無法解析該符號,,因?yàn)樵诰幾g單元A生成目標(biāo)文件A.obj后,內(nèi)聯(lián)函數(shù)fun()已經(jīng)被替換掉,,A.obj中不再有fun這個(gè)符號,,鏈接器自然無法解析。

所以,,如果一個(gè)inline函數(shù)會在多個(gè)源文件中被用到,,那么必須把它定義在頭文件中。在C++中,,這意味著如果inline函數(shù)具有public或者protected訪問屬性,,你就應(yīng)該這么做。

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多