1. 程式人生 > >C++標頭檔案重定義解決方式

C++標頭檔案重定義解決方式

C++由於標頭檔案重複包含了所定義的變數或者常量,編譯器就會報重複定義的錯誤。
可以通過以下幾種方式進行解決:

在標頭檔案加上防止重定義的巨集:

#ifndef FileName_H_
#define FileName_H_ 
....(標頭檔案內容)
#endif
注:如果FileName_H_這個名字已經被使用,將會出現未定義問題,請保證FileName_H_的唯一性。

在標頭檔案加上  #pragma once 

VS建立的類都會預設新增這一行

以上兩種方式基本上可以解決90%以上的重複定義的問題。

儘量保證在標頭檔案中只宣告變數和函式,不要定義

遇到重定義的全域性變數,可以將變數定義改到.

cpp原始檔中,標頭檔案中則用extern的方式宣告 

在開發過程中,經常會使用第三方的API,單獨使用某一個API都正常,但是同時使用多個API的時候就會出現某些結構體重複定義的問題,此時可以按照下面幾種方式處理:

提取公共檔案:

將出現重複定義問題的struct、變數名、常量,提出到一個公共的.h檔案中,

然後將原檔案中公共部分的struct、變數名、常量遮蔽或刪除,同時在標頭檔案中包含公共的.h檔案。

使結構體的風格一致:

如果第三方庫中,出現C風格、C++風格兩種不同的struct定義方式,

此時只需要將C風格方式的struct修改為C++風格的struct,

同時更新API標頭檔案中對應使用C風格struct位置。