Re: [問題] 新手關於 #include 的問題

看板C_and_CPP (C/C++)作者 (我要加入劍道社!)時間15年前 (2011/04/08 22:37), 編輯推噓2(203)
留言5則, 2人參與, 最新討論串3/10 (看更多)

04/08 22:00,
V板友說的那個問題 的確應該要讓b.h去include a.h
04/08 22:00

04/08 22:00,
不然萬一b.h增加了某些功能 又包含了c.h
04/08 22:00

04/08 22:00,
那所有用到b.h的檔案都要改 會死人
04/08 22:00
※ 編輯: loveme00835 來自: 140.121.197.115 (04/08 22:02)

04/08 22:12,
樓上說的包含 c.h 問題其實是一樣的因為如果你原本就
04/08 22:12

04/08 22:13,
用不到 c.h, 那麼用到 b.h 的檔案不用修改就可以編過
04/08 22:13

04/08 22:13,
而如果你要用 c.h 的功能, 那本來就要去改動檔案了
04/08 22:13
沒那麼單純喔~ 假設原本的 b.h 是這樣 b.h: class B { private: A my_a_obj; public: void do_something(); // do something with my_a_obj; }; 然後 foo.cpp 用到 b.h #include <a.h> // because B uses A as its member #include <b.h> void foo(){ B somb_b_obj; some_b_obj.do_something(); } 目前看起來很 OK 可以用 過了一週 b.h 做了一些新功能,加入一個新的物件 C class B { private: A my_a_obj; C my_c_obj; public: void do_something(); // do something with my_a_obj void do_something_else(); // do somethiing with my_c_obj }; 很不幸的,foo.cpp 雖然完全沒呼叫到新功能 也根本不知道 my_c_obj 的存在 但因為 B 物件的成員變了 所以你一定要在 foo.cpp 中去 include c.h 不然編不過去 甚至又過了一個月 現在我們發現 my_a_obj 的功能我們要移掉了 原本的 do_something() 可以完全由 my_c_obj 來取代 那麼 foo.cpp 是不是又要把 #include <a.h> 這一行拿掉? 即使他呼叫 do_something() 的方式完全都一樣 所以說 在 header 中引入 header 是必要的 照理來說 B class 若只有實作層次上的改變 那依賴它的 foo.cpp 應該也不需要修改 只需要重新編譯 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.168.87.243

04/08 22:41, , 1F
我還來不及跟上的說...
04/08 22:41, 1F

04/08 22:56, , 2F
你這個是把 A, C 用變數使用的情況吧
04/08 22:56, 2F

04/08 22:56, , 3F
一般而言都是用 pointer, 不會有這個問題
04/08 22:56, 3F

04/08 22:57, , 4F
而如果真的要這樣用, 將 a.h/c.h include 進 b.h
04/08 22:57, 4F

04/08 22:58, , 5F
會比較好 (因為顯然單獨編 b.h 根本不可能編過)
04/08 22:58, 5F
文章代碼(AID): #1DdnsO6A (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1DdnsO6A (C_and_CPP)