[問題] typedef 在 struct 前與後有差異嗎

看板C_and_CPP作者 (Charlott.HonG)時間8年前 (2016/07/05 15:43), 8年前編輯推噓3(307)
留言10則, 4人參與, 最新討論串1/1
不好意思問題有點多, 我有標星號提示一下問題在哪裡 ------------------------------------- C++跟C的結構差有一點差別 在宣告時可以省掉(struct) 之前好像看過人家說C++的 結構本身就帶typedef(這是對的嗎?) ★還是純粹只是 C 比較嚴謹而已? struct node_struct { (struct) node_struct *link; int data; (struct) node_struct *rlink; }; 宣告時也可以省掉 (struct) node_struct head; ------------------------------------- 一般來說把它寫在一起像這樣 typedef struct node_struct { struct node_struct link; int data; struct node_struct rlink; } node; 然後在主程式內可以直接用node宣告 ------------------------------------- 用typedef並放在上面可以省掉一些字 把結構內的宣告替換成node typedef struct node_struct node; struct node_struct { node link; int data; node rlink; }; ------------------------------------- 也可以放到後面去,不過結構裡面不能替換 struct node_struct { struct node_struct link; int data; struct node_struct rlink; }; typedef struct node_struct node; ------------------------------------- ★應該要在前面還是後面呢,有什麼差異嗎 感覺上好像是要放前面(可以省) 開頭的struct好像不能省掉我這樣寫就不行了? typedef struct node_struct node; node { node link; int data; node rlink; }; -------------------------------------- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 然後就是類別要用到結構的話 程式碼:https://goo.gl/Xu3Hij ★ 我應該把結構寫在類別 [private, public, 類別外(全域)]? 我是試著把它寫在 pravate 內,因為也只有這個類別會用到 並且我希望可以利用 template 決定他的型態 把結構寫在類別內 只能把上述的 typedef 放在後面 struct XX{ ...}; typedef struct XXX A; 或者乾脆寫在一起 typedef struct XX{ ...} A; 如上附程式碼 我如果把它放到前面去 編譯會出錯 typedef struct XXX A; struct XX{ ...}; C:\Users\Kanasaki\Desktop\double_link_obj\main.cpp:22:10: error: field 'head' has incomplete type node head; 有寫到head的都會出錯 ★ 為什麼這裡只能放在下面了呢 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.35.139.127 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1467704630.A.CC0.html

07/05 15:51, , 1F
在C裡面,沒用typedef的話,每次定義struct的變數
07/05 15:51, 1F

07/05 15:52, , 2F
都需要加上一個struct會很麻煩。所以才在前面加typedef
07/05 15:52, 2F

07/05 15:55, , 3F
至於為什麼C++不用typedef,我就不清楚了
07/05 15:55, 3F

07/05 15:59, , 4F
我不懂為什麼寫C++要用C的寫法,typedef根本是累贅
07/05 15:59, 4F
痾...我以為這樣是比較好的寫法 QuQ 是說不要typedef直接用嗎,比如說 struct XXX{ ...} AAA; AAA abc; 這樣嗎

我看一下需要點時間QQ

07/05 16:06, , 6F
是struct A{...}; A a;
07/05 16:06, 6F
阿~對齁 C++ 可以直接用 了解~

07/05 16:09, , 7F
要不就是C++的寫法,要不就是C的寫法,不要混在一起
07/05 16:09, 7F

07/05 16:58, , 8F
因為有class 不要用typedef
07/05 16:58, 8F

07/06 20:43, , 9F
C++ struct 就只是預設 public 的 class
07/06 20:43, 9F

07/06 20:43, , 10F
再加上 C++ 指稱 class 名不需加上 'class' 關鍵字
07/06 20:43, 10F
了解~ ※ 編輯: hunandy14 (120.117.72.133), 07/07/2016 17:38:57
文章代碼(AID): #1NUsKsp0 (C_and_CPP)