[問題] enum用法?

看板C_and_CPP作者 (仁)時間13年前 (2012/07/07 14:25), 編輯推噓4(4052)
留言56則, 9人參與, 最新討論串1/3 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) G++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) NO 問題(Question): enum 宣告問題、初始化 程式碼(Code):(請善用置底文網頁, 記得排版) 以下是我的enum的宣告:(在我的標頭檔) #ifndef __NETLIST_H__ #define __NETLIST_H__ using namespace std; enum Type_E; enum Type_E { NONE=0, LOW, HIGH, INPUT, NOT, AND, NAND, OR, NOR, XOR, XNOR }; #endif error message: error: use of enum 'Type_E' without previous declaration 補充說明(Supplement): 這個的宣告方式我原本是使用visual studio 2010 、compiler之後我的code都可以 正常work,然後丟進工作站(linux)用g++ compiler之後就有這個錯誤訊息, 我想請問這個的error訊息要如何de?為什麼visual studio都可以過得code在給g++ compile之後會有問題? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.240.62.4

07/07 16:40, , 1F
為啥正式宣告enum之前先有一行空頭宣告 這有什麼用意
07/07 16:40, 1F

07/07 16:51, , 2F
建議用開源的IDE,比如:Dev-C++ Code::Blocks Eclipse
07/07 16:51, 2F

07/07 20:01, , 3F
試試看typedef enum{...}Type_E;
07/07 20:01, 3F

07/07 20:42, , 4F
不要用什麼typedef 把第四行拿掉就可以了
07/07 20:42, 4F

07/07 20:43, , 5F
還有,#define的名稱不要用雙底線開頭
07/07 20:43, 5F

07/07 20:43, , 6F
header 中不要使用 using namespace
07/07 20:43, 6F

07/07 21:25, , 7F
第四行是為了我有個副程式需要return enum類型的變數
07/07 21:25, 7F

07/07 21:26, , 8F
所以第四行拿掉好像沒有解掉~ header中不能使用using name
07/07 21:26, 8F

07/07 21:30, , 9F
space的話,我在header中宣告的string變數就不能使用了
07/07 21:30, 9F

07/07 21:31, , 10F
std::string
07/07 21:31, 10F

07/07 21:31, , 11F
補充一下,line4是因為我有兩個header互相include,所以要
07/07 21:31, 11F

07/07 21:32, , 12F
可以說明一下為什麼header不要使用namespace嗎?
07/07 21:32, 12F

07/07 21:37, , 13F
include一個 header 就會把它內容複製過來, 包含了
07/07 21:37, 13F

07/07 21:39, , 14F
你 using namespace 那幾行, 可能造成 "命名空間汙染"
07/07 21:39, 14F

07/07 21:44, , 15F
enum 用 class 包起來吧... 不然 include 這個檔案的
07/07 21:44, 15F

07/07 21:45, , 16F
程式碼都不能用那些列舉名稱來做其他事情了
07/07 21:45, 16F

07/07 21:50, , 17F
to:loveme,我現在已經把header中namespace的問題去除了,
07/07 21:50, 17F

07/07 21:50, , 18F
所以改成在各個cpp檔宣告,這樣的做法應該可以避免你剛剛
07/07 21:50, 18F

07/07 21:51, , 19F
說的"命名空間汙染"的問題了吧?
07/07 21:51, 19F

07/07 21:53, , 20F
但是我的error應該不是這個問題引起(改完後出現一樣error)
07/07 21:53, 20F

07/07 21:54, , 21F
用class包起來的方法我在改看看......但是這個error的真正
07/07 21:54, 21F

07/07 21:54, , 22F
你錯誤的行數呢?
07/07 21:54, 22F

07/07 21:54, , 23F
原因到底是怎麼引起的是我比較好奇的點 = =+
07/07 21:54, 23F

07/07 21:57, , 24F
at line4: enum Type_E;
07/07 21:57, 24F

07/07 21:57, , 25F
就跟 little大講的一樣, 那行沒存在的必要
07/07 21:57, 25F

07/07 21:58, , 26F
有function使用到Type_E的話,你要把enum定義放到前面
07/07 21:58, 26F

07/07 21:59, , 27F
但是我有個 Type_E _Get_Type(...)的function就不能過了..
07/07 21:59, 27F

07/07 21:59, , 28F
就是你在第四行就要把enum的內容全部寫出來
07/07 21:59, 28F

07/07 22:02, , 29F
我目前de到這個function裡面的"transform"有問題,註解之
07/07 22:02, 29F

07/07 22:03, , 30F
後可以過了~
07/07 22:03, 30F

07/07 22:04, , 31F
這個transform是<algorithm>的函式,其目的也只是轉換
07/07 22:04, 31F

07/07 22:05, , 32F
string大寫轉至小寫,比對是哪個enum中的type的string,然
07/07 22:05, 32F

07/07 22:05, , 33F
後回傳這個Type_E的變數
07/07 22:05, 33F

07/07 22:07, , 34F
但功能重要,不能就這樣過了阿 = =+
07/07 22:07, 34F

07/07 22:07, , 35F
錯誤訊息呢...
07/07 22:07, 35F

07/07 22:09, , 36F
多到崩潰了.........
07/07 22:09, 36F

07/07 22:10, , 37F
error: no matching function for call to 'transform'
07/07 22:10, 37F

07/07 22:12, , 38F
用置底文內的網站貼吧
07/07 22:12, 38F

07/07 22:12, , 39F
07/07 22:12, 39F

07/07 22:15, , 40F
07/07 22:15, 40F

07/07 22:15, , 41F
錯在那個"transform"
07/07 22:15, 41F

07/07 22:16, , 42F
沒排版,傷眼睛sor = ="
07/07 22:16, 42F

07/07 23:03, , 43F
std::transform
07/07 23:03, 43F

07/07 23:43, , 44F
沒用過 MSVC, 它容忍度真的那麼高喔, 連沒有 std:: 都行?
07/07 23:43, 44F

07/07 23:44, , 45F
喔沒事, 是因為你本來用了 using 所以可以... :~
07/07 23:44, 45F

07/08 09:41, , 46F
應該不是這個問題,是transform使用的問題..先估狗中.....
07/08 09:41, 46F

07/08 10:00, , 47F

07/08 10:01, , 48F
結果是 tolower這邊出問題,不過我還在理解原因是????
07/08 10:01, 48F

07/08 11:21, , 49F
不要用using namespace std;
07/08 11:21, 49F

07/08 12:08, , 50F
感謝樓上大大的意見,不過主要問題已經釐清了..
07/08 12:08, 50F

07/08 12:24, , 51F
"tolower這邊出問題" 就是using namespace std;害的
07/08 12:24, 51F

07/08 12:26, , 52F
我只用 using std::string 就會過
07/08 12:26, 52F

07/08 17:40, , 53F
樓上的意思是,在我的cpp裡面也不要使用 namespace嗎?
07/08 17:40, 53F

07/08 18:31, , 54F
要用的話就只要using你需要用到的就好
07/08 18:31, 54F

07/08 18:32, , 55F
直接std;有可能會造成誤判
07/08 18:32, 55F

07/08 18:56, , 56F
在 cpp 裡面 ok,在 header 裡面很容易出問題
07/08 18:56, 56F
文章代碼(AID): #1FzzPBNw (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1FzzPBNw (C_and_CPP)