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

作者: nsa1099 (可魯)   2017-09-06 18:03:12
小弟知道伸手牌很不好
但因為自學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
作者: hylkevin (19s)   2017-09-06 18:08:00
namespace?
作者: LPH66 (-6.2598534e+18f)   2017-09-06 18:12:00
1. namespace 問題, 所有標準的東西都在 std:: 下面然後提醒一下這裡絕對不要 using namespace2. 是, 不過通常會儘量減少在 header 裡引用的標頭檔3. 你不打那一行編譯器就不知道你在做 template 宣告/定義
作者: stucode   2017-09-06 18:28:00
新手的話建議還是從一般函數練起 template實作要拆開放有時候還需要編譯器支援或者顯式具現化 這些問題可能會模糊你學習的焦點
作者: damody (天亮damody)   2017-09-06 18:29:00
先換ide
作者: rbufghj9713 (我只是來潛水)   2017-09-06 20:19:00
偷偷跟你說,string在std下
作者: nsa1099 (可魯)   2017-09-07 13:02:00
謝謝大大們的建議,可以run了,真的非常感謝
作者: Mistyshadowe (misty)   2017-09-07 19:36:00
想請問一下不要使用 using namespace 的原因是避免混淆嗎?
作者: grayStone (灰色石頭)   2017-09-07 20:26:00
污染
作者: Killercat (殺人貓™)   2017-09-07 22:20:00
.h裡面 using namespace xxx; 會污染所有include他的檔案 包含被.h include的在內然而.cpp裡面使用就比較沒有問題 因為絕大多數腦袋正常的工程師都會盡可能避免include .cpp當然我也看過天兵寫在precompile header(如stdafx.h)的
作者: stucode   2017-09-07 23:43:00
導入整個名稱空間很少有合理使用的場合除了放在標頭檔會污染其他檔案外在原始碼檔案裡面用也可能會產生問題更可怕的是有時候這樣做會讓名稱間偷天換日造成難解的執行時期 bug
作者: dces4212 (flawless)   2017-09-08 03:49:00
ide可以換VS community版 免費的

Links booklink

Contact Us: admin [ a t ] ucptt.com