C++成員函數實現在類定義中與在類定義外的區別(Windows下直接使用g++)


在上篇文章《inline的另一用處》中,提到函數實現在類定義中與類定義外的區別。

    現在先看個實驗:

    a.cpp:

   

[cpp]  view plain  copy
 
  1. #ifndef TEST_H  
  2. #define TEST_H  
  3. class A{  
  4.     public:  
  5.     int fun(int x){  
  6.     return (x*x+1000);  
  7. }  
  8. };  
  9. #endif  
  10.   
  11. void tt()  
  12. {  
  13. }  


b.cpp:

[cpp]  view plain  copy
 
  1. class A{  
  2.     public:  
  3.     int fun(int x);  
  4. };  
  5. void tt();    
  6. int yy()    
  7. {    
  8.     tt();   
  9.     A a;  
  10.     return a.fun(3);    
  11. }  
  12.       

將它們分別編譯后再鏈接:

顯示鏈接錯誤,因為b.cpp(b.o)中找不到A::fun(int)的引用。

將以上的a.cpp改為如下所示:

[cpp]  view plain  copy
 
  1. #ifndef TEST_H  
  2. #define TEST_H  
  3. class A{  
  4.     public:  
  5.     int fun(int x);  
  6. };  
  7. #endif  
  8. int A::fun(int x){  
  9.     return (x*x+1000);  
  10. }  
  11. void tt()  
  12. {  
  13. }  


    分別編譯a.cpp和b.cpp為a.o和b.o后鏈接,顯示鏈接成功。

    這樣,第一次鏈接錯誤的原因就很明顯了。

    結論:

    在類定義中的類成員函數實現有文件內部作用域,而在類定義外部的類實現有的是全局作用域。

 

http://blog.csdn.net/tobacco5648/article/details/7651408


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM