1. 程式人生 > >標頭檔案的包含以及名稱空間的引入儘量寫在cpp檔案中

標頭檔案的包含以及名稱空間的引入儘量寫在cpp檔案中


菜鳥程式設計需要知道的規範。

1,標頭檔案儘量包含在cpp檔案裡,而不是h檔案裡

  • 放在.cpp檔案中是比較安全的,檔案在多次遞迴包含後很容易出現一些定義和宣告上的問題。
  • 放在cpp中可以減小標頭檔案依賴,可以提高編譯速度。所以,能放在cpp中的,就不要放在h中。
  • 只有標頭檔案必須用到的放到標頭檔案,標頭檔案中可以使用前置宣告來代替。或者所有cpp都用到的也可以放到標頭檔案。
  • 哪裡用到就放哪裡,誰用誰包含。
  • 一般是預設放在cpp裡,之後如果出現.h也用了,再把cpp中的刪了。
2,不要在標頭檔案中使用using namespace 經常在標頭檔案中使用namespace。但這樣的結果就是,這個標頭檔案會被其他的檔案所包含,那麼這樣那個檔案也用了namespace所指定的名稱空間,這並不是我們所期望的,可能導致衝突。所以不要在標頭檔案裡面使用namespace,特別是介面標頭檔案。

比如說:

在A.h中

using namespace std;


在B.h中,
我們自己定義了一個類vector,
class vector
本想這個類是純粹我們自己定義的,不是std的那個。

可是在B.cpp中,
我們
#include "B.h"
#include "A.h"

vector a;

在編譯到此的時候,編譯器就會報錯,不知道這個vector到底是std的那個,還是我們自己定義的那個。

所以我們最好不要在標頭檔案中使用using namespace XXX;我們可以在標頭檔案中直接使用全名稱。在cpp中可以放心地使用它。


相關推薦

檔案包含以及名稱空間引入儘量cpp檔案

菜鳥程式設計需要知道的規範。 1,標頭檔案儘量包含在cpp檔案裡,而不是h檔案裡 放在.cpp檔案中是比較安全的,檔案在多次遞迴包含後很容易出現一些定義和宣告上的問題。放在cpp中可以減小標頭檔案依賴,可以提高編譯速度。所以,能放在cpp中的,就不要放在h中。只有標頭

C++檔案名與名稱空間

    名稱空間支援是一項C++特性,目的是為了讓您編寫大型程式以及將多個廠商現有的程式碼組合起來的程式時更容易,它還有助於組織程式,一個潛在的問題是,可能使用兩個已封裝好的產品,而它們都包含一個名為wanda( )的函式。這樣,使用wanda( )函式時,編譯器將不知道指的事哪個版本。名稱空間讓廠家能夠將其

opencv3.3 該檔案包含不能在當前內碼表(936)表示的字元。請將該檔案儲存為 Unicode 格式以防止資料丟失

VS2015 + opencv3.3 執行報錯: warning C4819: 該檔案包含不能在當前內碼表(936)中表示的字元。請將該檔案儲存為 Unicode 格式以防止資料丟失  error C2065: “ptr”: 未宣告的識別符號 error C2065: “ptr”:

VS2017 報錯該檔案包含不能在當前內碼表(936)表示的字元。請將該檔案儲存為 Unicode 格式以防止資料丟失

尤其程式碼是從linux平臺複製過來: 報錯如圖: 更有甚者基本函式都報錯: 當下檢查發現if else break case等基本函式並無問題時,報錯行數明顯不一致等一定要注意文件編碼格式, 最簡單的辦法是用notepad++,逐個將.

QT:warning: C4819: 該檔案包含不能在當前內碼表(936)表示的字元。

一般來說,這個警告沒有什麼影響。要想去掉這個警告的方法有: (1)轉換Code檔案為Unicode格式; (2)在Project -> Properties -> Configuration Properties -> C/C++ -> Advanc

《 warning C4819: 該檔案包含不能在當前內碼表(936)表示的字元。請將該檔案儲存為 Unicode 格式以防止資料丟失》

問題描述 最近專案中添加了很多外部的.h和.cpp檔案,有可能是編碼格式不一樣,在生成解決方案時,輸出窗口出現了好多的warning C4819警告資訊,具體情況如下所示: warning C4819: 該檔案包含不能在當前內碼表(936)中表示的字元。 請將該檔案儲存為

VS2017 warning C4819: 該檔案包含不能在當前內碼表(936)表示的字元。請將該檔案儲存為 Unicode 格式以防止資料丟失

Visual Studio 2017出現warning C4819: 該檔案包含不能在當前內碼表(936)中表示的字元。請將該檔案儲存為 Unicode 格式以防止資料丟失 解決方案: 1.修改字元編碼格式 Visual Studio提供高階儲存選項功能,

php curl 請求下載檔案以及同時向介面傳送引數和檔案

最近在弄抓取資料,自然而然用到curl,結合其中遇到的一些問題,google了很久,加上自己嘗試,最後都解決了。 首先是php curl 從url 下載檔案 function getImage($url, $fileName) { $ch = curl

“該檔案包含不能在當前內碼表(936)表示的字元,請將該檔案儲存為 Unicode 格式以防止資料丟失”

這個警告怎麼破?其實很簡單: 以VS2012為例,去除方法見下: ------------------------------------------- 影象處理開發資料、影象處理開發需求、

在工程.h 檔案了定義了變數,依然在.cpp檔案裡報 未宣告的變數,無法識別的識別符號錯誤

實際應用中總會遇到各種錯誤,比如我在.h檔案裡定義了一個結構體,並且.cpp檔案包含了該標頭檔案,結果在標頭檔案裡使用,卻無法識別該型別。百思不得其解,後來才發現,原理是這樣子的。     1, 我標

檔案儲存到資料庫/從資料庫讀出檔案

    將檔案儲存到資料庫中,實際上是將檔案轉換成二進位制流後,將二進位制流儲存到資料庫相應的欄位中。(在SQL Server中該欄位的資料型別是Image,在Access中該欄位的資料型別是OLE物件,在ORCLE中是BLOB型別。 //儲存檔案到資料庫中 FileInfo fi=new FileInfo(

檔案、預處理命令、名稱空間(作用域)、連結

關於與include搭配的符號(雙引號 & 尖括號):   C++有一些編寫好的標頭檔案(比如標準函式庫等等),它們存放在VC++的Include資料夾裡。當我們使用#include <

C++檔案的重定義問題以及檔案互相包含問題

  有的人將重複編譯,重複包含與重複定義弄混,比如:定義一個類,在例項化它之前並不產生記憶體開銷;這與基本型別有所區別。 明明在標頭檔案使用了#pragma once;#ifndef...#defi

C語言:解決多個C檔案包含同一檔案引起的檔案重複包含問題

解決多個C檔案包含同一標頭檔案引起的檔案重複包含問題,並給出全域性變數如何定義和宣告的方法. 解決方法: 1. 定義公共檔案: global.c 和global.h 其中, global.c檔案中: #include "global.h" //定義全域性變數 int g

C/C++避免檔案重複包含的方法

C/C++避免標頭檔案重複包含的方法 1. #ifndef 2. #pragma once 3. 混合使用 在實際的程式設計過程中,因為會使用多個檔案,所以在檔案中不可避免的要引入一些標頭檔案,這樣就可能會出現一個頭檔案被 include

關於extern以及原始檔和檔案的應用

最近在糾結這個問題,全域性變數的宣告到底應該在原始檔還是標頭檔案中,其實有兩種方法: 緣由:因為 int a;表示的是一個定義,而extern int a;卻是一個宣告 方法一:在a.h中表示全域性變數的宣告:extern int a;       &nbs

關於 C/C++ 引入檔案的一點理解

今天 計算機圖形學 又講新知識了,又要引入新的標頭檔案。突發奇想,好像懂了引入標頭檔案的具體含義,之前一直沒有關注過這個知識點。 因為這節課要教 變換 ,所以要用到 glm 這個庫。進行相應下載後,配置完環境後,需要引入標頭檔案。 //glm #include

c語言檔案以及make注意事項

c語言標頭檔案以及make注意事項 標頭檔案說明:自己定義的標頭檔案和專案檔案放在一起,注意使用""而不是使用<>,系統的標頭檔案才使用<> 當main函式要呼叫其他函式的時候在編譯的時候需要將其他的c檔案也一起編譯 gcc main.c test.c   make

simplelink_cc2640r2_sdk_1_40_00_45 之 C/C++ Compiler 檔案包含的巨集值

simplelink_cc2640r2_sdk_1_40_00_45 ---------------------------------------------------------------- $SRC_BLE_DIR$=C:\Users\coolban_one\Desktop\C

初夏小談:C/C++防止檔案被重複包含的兩種方法及區別

防止標頭檔案被重複包含的兩種方式: 1.條件編譯的巨集 2.#pragma once 先來說說第一種: #ifndef __HEADNAME__H__ #define __HEADNAME__H__ //... //標頭檔案 #endif C/C++標準支援