[問題] 新手發問:請問大大們怎麼寫header file

看板C_and_CPP作者 (可魯)時間8年前 (2017/09/06 18:03), 編輯推噓7(7018)
留言25則, 10人參與, 最新討論串1/1
小弟知道伸手牌很不好 但因為自學C++實在有點吃力 所以虛心上來請教大神們很基本的問題 小弟是在dev c++ 4.9.2的環境下做開發 如果有寫一個表頭檔(header file) "通常是將宣告式含入進去,之後在源碼檔再去做定義式" 例如我建一個新的表頭檔 "FunDeclare.h" template <typename elemtype> //(1) void display_message(const string&, const vector<elemtype>&); //(2) 我在表頭檔內做函式的宣告 但是編譯器和我說沒有 string 和 vector 的資料型態 即使我include了string和vector的libary還是編譯錯誤 還在(2)行開頭加了extern只做宣告還是一樣錯 0rz 1. 請問我這樣宣告函式在表頭檔中有什麼問題嗎? 2. 還有想問的是各位大神們是否在建表頭檔的時候都要含入很多libary嗎? 3. 有關template是不是每次在type的時候都要打出(1)這行阿? 即使前面曾經用過elemtype了。如果我後面有要在宣告其他函示, 仍要重新打一次"template <typename elemtype>"。有方法可以只要定義一次template嗎? 感覺這些問題很新手,請大神們鞭小力點 qq -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 175.181.190.96 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1504692199.A.CC8.html

09/06 18:08, , 1F
namespace?
09/06 18:08, 1F

09/06 18:12, , 2F
1. namespace 問題, 所有標準的東西都在 std:: 下面
09/06 18:12, 2F

09/06 18:13, , 3F
然後提醒一下這裡絕對不要 using namespace
09/06 18:13, 3F

09/06 18:14, , 4F
2. 是, 不過通常會儘量減少在 header 裡引用的標頭檔
09/06 18:14, 4F

09/06 18:14, , 5F
3. 你不打那一行編譯器就不知道你在做 template 宣告/定義
09/06 18:14, 5F

09/06 18:28, , 6F
新手的話建議還是從一般函數練起 template實作要拆開放
09/06 18:28, 6F

09/06 18:29, , 7F
有時候還需要編譯器支援或者顯式具現化 這些問題可能會
09/06 18:29, 7F

09/06 18:29, , 8F
模糊你學習的焦點
09/06 18:29, 8F

09/06 18:29, , 9F
先換ide
09/06 18:29, 9F

09/06 20:19, , 10F
偷偷跟你說,string在std下
09/06 20:19, 10F

09/07 13:02, , 11F
謝謝大大們的建議,可以run了,真的非常感謝
09/07 13:02, 11F

09/07 19:36, , 12F
想請問一下不要使用 using namespace 的原因
09/07 19:36, 12F

09/07 19:37, , 13F
是避免混淆嗎?
09/07 19:37, 13F

09/07 20:26, , 14F
污染
09/07 20:26, 14F

09/07 22:20, , 15F
.h裡面 using namespace xxx; 會污染所有include他的
09/07 22:20, 15F

09/07 22:20, , 16F
檔案 包含被.h include的在內
09/07 22:20, 16F

09/07 22:20, , 17F
然而.cpp裡面使用就比較沒有問題 因為絕大多數腦袋正常
09/07 22:20, 17F

09/07 22:21, , 18F
的工程師都會盡可能避免include .cpp
09/07 22:21, 18F

09/07 22:21, , 19F
當然我也看過天兵寫在precompile header(如stdafx.h)的
09/07 22:21, 19F

09/07 23:43, , 20F
導入整個名稱空間很少有合理使用的場合
09/07 23:43, 20F

09/07 23:43, , 21F
除了放在標頭檔會污染其他檔案外
09/07 23:43, 21F

09/07 23:43, , 22F
在原始碼檔案裡面用也可能會產生問題
09/07 23:43, 22F

09/07 23:43, , 23F
更可怕的是有時候這樣做會讓名稱間偷天換日
09/07 23:43, 23F

09/07 23:43, , 24F
造成難解的執行時期 bug
09/07 23:43, 24F

09/08 03:49, , 25F
ide可以換VS community版 免費的
09/08 03:49, 25F
文章代碼(AID): #1PhyVdp8 (C_and_CPP)