→ angleevil:超哥,我有疑問此code不是已經用typedef了嘛?為何 06/22 16:59
→ angleevil:A.cpp中還要用struct A去宣告變數a? 06/22 17:00
如你所說,把 struct A 改成 A 的話是沒有錯的
不過這個跟「extern」與「無法解析外部符號」這個問題無關
所以我就保留原程式碼的寫法了
※ 編輯: james732 來自: 140.117.171.46 (06/22 17:02)
推 chenroseyaks:謝謝,我試試看 06/22 17:03
→ angleevil:<m.m> 06/22 17:05
推 xatier:超哥必推! 06/22 17:06
→ chenroseyaks:我剛剛把整個struct重新在test.cpp宣告,再用extern 06/22 17:08
→ chenroseyaks:宣告一次,發現這樣也可以。只是沒那麼正規XD 06/22 17:09
→ james732:你確定......? 06/22 17:09
→ james732:我希望你能很清楚的知道extern, typedef, include的作用 06/22 17:10
→ angleevil:= =嗆你一下,如果你在test.cpp宣告好,幹麼還要用extern? 06/22 17:11
→ chenroseyaks:我也是剛剛亂試的,本來struct只想到宣告在一個檔裡 06/22 17:14
→ xatier:去念念ADT吧 =..= 06/22 18:06
→ fjm31714:都寫c++了typedef是不是可以省略? 06/22 18:57
→ xatier:都寫c++了 .h是不是可以省略? 06/22 19:06
推 purpose:有副檔名還是比較好的,作業系統比較好判別檔案的類型 06/22 19:15
→ angleevil:~"~typedef和.h跟c++無關... 06/22 19:22
推 tropical72:static,extern,原原po可能要再了解這二個keyword特性. 06/22 20:22
→ youknowme09:header檔跟是不是C++無關阿 06/22 20:59
→ angleevil:我是回答省略的問題...不是寫c++,那些東西就可省略 06/22 21:04
推 littleshan:typedef 可以省沒錯啊 而且也應該要省 06/22 21:26
→ littleshan:.h 則不應該省略,標準函式庫之所以省略有它的原因 06/22 21:28
→ angleevil:我的意思是c++跟省略那些東西無關,甚至.h根本不該省 06/22 21:34
推 littleshan:C 不能省略 typedef,所以這件事和 C++ 是有關的吧 06/22 21:51
推 aecho:為什麼C++可以省略typedef呢?這塊我不懂,可以多講些嗎? 06/22 21:55
struct A { ... };
typedef struct B { ... } B;
int main()
{
struct A a1; // C & C++ 寫這樣都可以
struct B b1; // C & C++ 寫這樣都可以
A a2; // 在沒有 typedef 的情況,C不能省略 struct,但C++可以
B b2; // 因為有 typedef,C & C++ 寫這樣都可以
}
※ 編輯: james732 來自: 140.117.171.46 (06/22 21:58)
→ angleevil:恩,這塊可以詳細點嘛? 因為我是昨天才搞懂extern. 06/22 21:57
→ angleevil:c不能省略typedef是這句,跟extern有關聯嗎? 06/22 21:58
完全是兩回事,extern 跟 typedef 並沒有什麼關聯。
這篇文裡面,在 A.cpp 裡面寫了 struct A a;
如果要在 main.cpp 裡面使用 A.cpp 裡的這個 a
就需要寫 extern struct A a;
代表這個 a 屬於別的外部檔案,而不是在 main.cpp 裡面
如果 main.cpp 裡面只寫了 struct A a; (沒有 extern 的話)
這樣就會再度宣告另一個 a 變數
連結的時候會出現重覆定義(A.cpp 與 main.cpp 都有個 a, 這樣是不可以的)
※ 編輯: james732 來自: 140.117.171.46 (06/22 22:02)
推 angleevil:<m.m>受教了 06/22 22:01
※ 編輯: james732 來自: 140.117.171.46 (06/22 22:02)
推 nowar100:真的不能推好人超嗎 A__A 06/22 22:05
→ angleevil:所以main.cpp裡面,可以用extern A a? 如果我沒理解錯誤 06/22 22:07
是啊,在C++裡面,那個 struct 是可以省略掉的
在 C 裡面只要有 typedef,也可以省略掉 struct
※ 編輯: james732 來自: 140.117.171.46 (06/22 22:08)
→ angleevil:<m.m> 06/22 22:10
推 aecho:嗯,好人卡遞。C++應該是struct和class幾乎是同義的關係吧。 06/23 09:06