天天看點

關于全局變量和全局函數的聲明

申明全局變量,全局函數一定要在cpp中申明

其他類引用該全局變量就include該cpp的h檔案

然後extern一下就好了

否則容易出現該重複定義錯誤

這個"容易"是如何解釋的呢?

例如A.h中如果申明了全局變量int Global;

在B.h中include "A.h"

              extern int Global;

則你include A.h相當于把A.h中全局變量的申明也include進來了,編譯器就會認為是重複定義

是以全局變量和函數申明一定要在cpp中 

當.h檔案裡有函數實作時

VS2005編譯器報錯誤 fatal error LNK1169: 找到一個或多個多重定義的符号

解決方法 

1.在.h裡的函數聲明前加 inline

2.在項目->屬性->連結器->指令行->附加選項中加   /force 

注: 之是以 在.h裡的函數聲明前加 inline 可以解決問題是因為

内聯函數與普通函數的不同就是在于函數的定義部分的執行方式。内聯函數是在執行時直接将定義

部分的代碼複制過去執行,而普通的是進入到該函數定義部分執行,然後反還結果。前者速度快但

比較占用内容,後面速度慢但省空間,因為函數在執行完後所用的記憶體就會自動被系統收回。

不會被編輯器認為是重複定義函數.

繼續閱讀