[問題] C語言 struct 問題

看板C_and_CPP作者 (藍影)時間13年前 (2010/11/20 11:17), 編輯推噓5(5016)
留言21則, 5人參與, 最新討論串1/3 (看更多)
遇到的問題: (題意請描述清楚) error C2275: 'MyStruct' : 將此型別當做運算式的使用方式不合法 寫 .cpp 寫習慣了,可能養成了不好的習慣, 對於 struct 之宣告及 typedef 現在變得很亂。 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) VC2008 有問題的code: (請善用置底文標色功能) (1) typedef struct _Node{ struct _Node* next; int key; }Node; typedef struct _Node* pNode; (2) struct _Node{ struct _Node* next; int key; }; typedef struct _Node Node; typedef struct _Node* pNode; (3) // justdemon 提供 typedef struct _Node{ struct _Node* next; int key; } Node, *pNode; (4) // madoka82 提供 typedef struct { struct Node* next; int key }Node; typedef Node* pNode; // ====================================== // travel void travel(pNode head) { /* if(head==NULL) { printf("(NULL)"); return; }*/ // 加這段 comment 不能執行,沒有這段可執行。 pNode tmp = head; while(tmp!=NULL){ printf("%d ", tmp->key); tmp = tmp->next; } } 這二種寫法都有問題, 日後函數用 pNode 後,竟會出現 C2275 之 error, 副檔名為 .c 之情形下,應如何宣告、typedef 才能避開這種錯? 若先進認為資訊不足, 我再 po 上原始碼為佳 謝謝各位指教! -- YouLoveMe() ? LetItBe() : LetMeFree(); -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.177.76.142 ※ 編輯: tropical72 來自: 180.177.76.142 (11/20 11:52) ※ 編輯: tropical72 來自: 180.177.76.142 (11/20 11:53)

11/20 11:56, , 1F
(1)的大括號結尾"struce"打錯字?
11/20 11:56, 1F

11/20 12:01, , 2F
C++ 跟 C 的 struct 宣告真的不太一樣 之前也是用 gcc 編
11/20 12:01, 2F

11/20 12:02, , 3F
譯 .c 沒問題丟去 VC 編不過...但是我鴕鳥 換編譯器編...
11/20 12:02, 3F

11/20 12:15, , 4F
typedef struct _Node{} Node, *pNode;
11/20 12:15, 4F

11/20 12:25, , 5F
回p大,抱歉,那真的是key錯.
11/20 12:25, 5F

11/20 12:25, , 6F
原碼和錯誤訊息: http://nopaste.csie.org/190d9
11/20 12:25, 6F

11/20 12:27, , 7F
回 j 大,一樣不過 = =
11/20 12:27, 7F
謝謝 justdemo 與 madoka82 協助, 目前還是過不去, 仍在努力中.. (第一次有 try 不出來,想怪 complier 的衝動 XD) ※ 編輯: tropical72 來自: 180.177.76.142 (11/20 12:31) ※ 編輯: tropical72 來自: 180.177.76.142 (11/20 12:31)

11/20 12:37, , 8F

11/20 12:38, , 9F
11/20 12:38, 9F

11/20 12:39, , 10F
p 大好神!!!!不過我還是不知道到底發生什麼事了 = =
11/20 12:39, 10F

11/20 12:40, , 11F
Dev 會過, GCC 會過, VC 竟然不過..
11/20 12:40, 11F

11/20 12:52, , 13F
vc2008 不支援C99,那C89/C90/C98 可支援到哪 ?
11/20 12:52, 13F

11/20 12:53, , 14F
VC有自己的一套,不過記得從2003還是2005開始,有向標準
11/20 12:53, 14F

11/20 12:54, , 15F
靠齊,比較守規矩,所以 VC6 常被說爛就是這樣
11/20 12:54, 15F

11/20 12:55, , 16F
C99的話,VC真的不太鳥
11/20 12:55, 16F

11/20 12:56, , 17F
感謝p大指教!!這個我自己抓都不知道抓到什麼時候 XD
11/20 12:56, 17F

11/20 12:57, , 18F
(memo) 學到寶貴的 編譯器相關資訊... 謝謝 p 桑
11/20 12:57, 18F

11/20 13:04, , 19F
說到上文提的goto,其實微軟的_beginthread()這個關鍵函數
11/20 13:04, 19F

11/20 13:05, , 20F
就是用goto做例外處理的典型例子。
11/20 13:05, 20F

11/20 13:06, , 21F
真想請版主把這篇收到精華區... XD
11/20 13:06, 21F
文章代碼(AID): #1CvptUI4 (C_and_CPP)
文章代碼(AID): #1CvptUI4 (C_and_CPP)