作者nsa1099 (可魯)
看板C_and_CPP
標題[問題] 新手發問:請問大大們怎麼寫header file
時間Wed Sep 6 18:03:12 2017
小弟知道伸手牌很不好
但因為自學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://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1504692199.A.CC8.html
1F:→ hylkevin: namespace? 09/06 18:08
2F:推 LPH66: 1. namespace 問題, 所有標準的東西都在 std:: 下面 09/06 18:12
3F:→ LPH66: 然後提醒一下這裡絕對不要 using namespace 09/06 18:13
4F:→ LPH66: 2. 是, 不過通常會儘量減少在 header 裡引用的標頭檔 09/06 18:14
5F:→ LPH66: 3. 你不打那一行編譯器就不知道你在做 template 宣告/定義 09/06 18:14
6F:推 stucode: 新手的話建議還是從一般函數練起 template實作要拆開放 09/06 18:28
7F:→ stucode: 有時候還需要編譯器支援或者顯式具現化 這些問題可能會 09/06 18:29
8F:→ stucode: 模糊你學習的焦點 09/06 18:29
9F:推 damody: 先換ide 09/06 18:29
10F:推 rbufghj9713: 偷偷跟你說,string在std下 09/06 20:19
11F:→ nsa1099: 謝謝大大們的建議,可以run了,真的非常感謝 09/07 13:02
12F:推 Mistyshadowe: 想請問一下不要使用 using namespace 的原因 09/07 19:36
13F:→ Mistyshadowe: 是避免混淆嗎? 09/07 19:37
14F:→ grayStone: 污染 09/07 20:26
15F:→ Killercat: .h裡面 using namespace xxx; 會污染所有include他的 09/07 22:20
16F:→ Killercat: 檔案 包含被.h include的在內 09/07 22:20
17F:→ Killercat: 然而.cpp裡面使用就比較沒有問題 因為絕大多數腦袋正常 09/07 22:20
18F:→ Killercat: 的工程師都會盡可能避免include .cpp 09/07 22:21
19F:→ Killercat: 當然我也看過天兵寫在precompile header(如stdafx.h)的 09/07 22:21
20F:推 stucode: 導入整個名稱空間很少有合理使用的場合 09/07 23:43
21F:→ stucode: 除了放在標頭檔會污染其他檔案外 09/07 23:43
22F:→ stucode: 在原始碼檔案裡面用也可能會產生問題 09/07 23:43
23F:→ stucode: 更可怕的是有時候這樣做會讓名稱間偷天換日 09/07 23:43
24F:→ stucode: 造成難解的執行時期 bug 09/07 23:43
25F:推 dces4212: ide可以換VS community版 免費的 09/08 03:49