避免標頭檔案重複定義
可以測試一下,如果我們多次包含iostream.h這個標頭檔案,也不會出現上面的錯誤。要解決標頭檔案重複包含的問題,可以使用條件預處理指令。修改後的標頭檔案如下:
animal.h
#ifndef ANIMAL_H_H //我們一般用#define定義一個巨集,是為了在程式中使用,使程
序更加簡潔,維護更加方便,然而在此處,我們只是為了判斷
#define ANIMAL_H_H ANIMAL_H_H是否定義,以此來避免類重複定義,因此我們沒有為
其定義某個具體的值。在選擇巨集名時,要選用一些不常用的名字,
class animal 因為我們的程式經常會跟別人寫的程式整合,如果選用一個很常用
的名字(例如:X),有可能會造成一些不必要的錯誤
{
public:
animal();
~animal();
void eat();
void sleep();
virtual void breathe();
};
#endif
fish.h
#include "animal.h"
#ifndef FISH_H_H
#define FISH_H_H
class fish:public animal
{
public:
void breathe();
};
#endif
我們再看EX10.cpp的編譯過程。當編譯器展開animal.h標頭檔案時,條件預處理指令判斷ANIMAL_H_H沒有定義,於是就定 義它,然後繼續執行,定義了animal這個類;接著展開fish.h標頭檔案,而在fish.h標頭檔案中也包含了animal.h,再次展開 animal.h,這個時候條件預處理指令發現ANIMAL_H_H已經定義,於是跳轉到#endif,執行結束。
通過分析,我們發現在這次的編譯過程中,animal這個類只定義了一次。
提示:Windows 2000初始安裝完畢後,對於已知檔案型別的副檔名是隱藏的,例如:“test.txt”這個檔案,在資源瀏覽器中看到的是“test”,在這種情況下,修改其檔名為“test.cpp”時,實際的檔名是“test.cpp.txt”,仍然是文字檔案。因此在Win2000下做開發時,要取消“隱藏已知檔案型別的副檔名”這一選項。
操作步驟:在資源瀏覽器(或我的電腦)中,選擇選單中的“工具->資料夾選項(O)…”,選擇“檢視”標籤頁,將滾動欄拖到底端,將“隱藏已知檔案型別的副檔名”核取方塊中的對號(√)取消掉,單擊“確定”按鈕。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10697500/viewspace-673948/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- extern 用法,全域性變數與標頭檔案(重複定義)變數
- 為什麼不在標頭檔案做定義
- Laravel 定時任務,避免重複的方法-----使用檔案鎖Laravel
- mac CLion cmake 呼叫自己定義的標頭檔案Mac
- 第二篇:淺談自定義標頭檔案可能導致的重定義問題
- C語言中的標頭檔案中的巨集定義C語言
- pch檔案的使用, 標頭檔案使用, 常量(const)的定義,以及一些常用的巨集定義
- EclipseCDT標準庫標頭檔案設定Eclipse
- 8.13 標頭檔案剖析:標頭檔案路徑(下)
- pycharm設定python標頭檔案模版PyCharmPython
- 編寫安全程式碼:不要在標頭檔案中定義變數變數
- 設定按鈕不可用,避免重複提交
- C 標頭檔案
- #include sys/xxx.h標頭檔案 UNIX標頭檔案
- android中自定義屬性重複定義Android
- locate標頭檔案和庫檔案
- C 標頭檔案 作用
- 祖傳標頭檔案
- 標頭檔案講解
- IOS-如何鎖定Xcode的API標頭檔案iOSXCodeAPI
- mysql避免插入重複資料MySql
- Go~避免重複造輪子Go
- java 表單避免重複提交?Java
- 標頭檔案的作用分析
- fcntl.h標頭檔案
- linux 標頭檔案 作用Linux
- 什麼是 標頭檔案
- 02@在類的標頭檔案中儘量少引入其他標頭檔案
- 避免對派生的非虛擬函式進行重定義函式
- javascript避免dom事件重複觸發JavaScript事件
- React 效能優化 - 避免重複渲染React優化
- 如何避免任務重複執行
- jFinal避免表單重複提交
- C/C++標頭檔案太難記?一個萬能標頭檔案全搞定!C++
- c++筆記_標頭檔案C++筆記
- Nt函式原型標頭檔案函式原型
- C語言 - 標頭檔案包含C語言
- 標頭檔案與庫檔案與菜鳥 (轉)