作者hunandy14 (Charlott.HonG)
看板C_and_CPP
標題[問題] typedef 在 struct 前與後有差異嗎
時間Tue Jul 5 15:43:47 2016
不好意思問題有點多,
我有標星號提示一下問題在哪裡
-------------------------------------
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
→ Caesar08: 在C裡面,沒用typedef的話,每次定義struct的變數 07/05 15:51
→ Caesar08: 都需要加上一個struct會很麻煩。所以才在前面加typedef 07/05 15:52
→ Caesar08: 至於為什麼C++不用typedef,我就不清楚了 07/05 15:55
→ Caesar08: 我不懂為什麼寫C++要用C的寫法,typedef根本是累贅 07/05 15:59
痾...我以為這樣是比較好的寫法 QuQ
是說不要typedef直接用嗎,比如說
struct XXX{
...} AAA;
AAA abc;
這樣嗎
我看一下需要點時間QQ
→ Caesar08: 是struct A{...}; A a; 07/05 16:06
阿~對齁 C++ 可以直接用 了解~
→ Caesar08: 要不就是C++的寫法,要不就是C的寫法,不要混在一起 07/05 16:09
推 Sidney0503: 因為有class 不要用typedef 07/05 16:58
推 LPH66: C++ struct 就只是預設 public 的 class 07/06 20:43
→ LPH66: 再加上 C++ 指稱 class 名不需加上 'class' 關鍵字 07/06 20:43
了解~
※ 編輯: hunandy14 (120.117.72.133), 07/07/2016 17:38:57