[問題] 有關於typedef的問題

看板C_and_CPP (C/C++)作者 (還有三個禮拜..)時間16年前 (2009/12/15 23:14), 編輯推噓17(17038)
留言55則, 5人參與, 最新討論串1/1
剛剛寫code時所遇到的問題 今天我在class A 定義了一個data type , 定義如下 typedef std::map<int,int> x; 但我想在class B裡面使用這個data type 不過我不想在class B內去 include A.h 我是有想過要不要在另外一個class C內定義這個data type 然後有需要這個data type的class去include C.h 可是感覺有點多此一舉 因為C.h內我只想定義這個data type , 不需要其他的code 所以有沒有其他更好的方法可以解決我的困擾 ? 感謝回答我的各位先進 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.122.184.220

12/15 23:19, , 1F
我覺得你描述的怪怪的耶
12/15 23:19, 1F

12/15 23:19, , 2F
請問哪邊奇怪 我可以解釋一下
12/15 23:19, 2F

12/15 23:21, , 3F
這樣寫 x不是一個container而是一個data type吧?
12/15 23:21, 3F

12/15 23:21, , 4F
阿...對 抱歉 我改一下文章
12/15 23:21, 4F
※ 編輯: anotherday 來自: 140.122.184.220 (12/15 23:22)

12/15 23:21, , 5F
樓上說的就是我覺得怪的地方 甚麼叫定義在class A的container
12/15 23:21, 5F

12/15 23:28, , 6F
為了讓其他class看不到x? namespace能用嗎?
12/15 23:28, 6F

12/15 23:31, , 7F
其實我只是想省掉在class B內include class A這行
12/15 23:31, 7F

12/15 23:31, , 8F
不include B根本就認不到這個type不是嗎???
12/15 23:31, 8F

12/15 23:33, , 9F
那你把那行也寫到B裡可能比較快XD
12/15 23:33, 9F

12/15 23:34, , 10F
而且什麼是include class A include不是都include header嗎
12/15 23:34, 10F

12/15 23:36, , 11F
恩恩 謝謝兩位的回答
12/15 23:36, 11F

12/15 23:38, , 12F
他是想說繼承吧
12/15 23:38, 12F

12/15 23:39, , 13F
這跟繼承無關阿@@ 主要是要讓B認到這type 如果有辦法繼承
12/15 23:39, 13F

12/15 23:40, , 14F
自然就剛好認的到~~
12/15 23:40, 14F

12/15 23:48, , 15F
我是推測0.0 實際上要讓B看到A裡的東西 只能靠繼承吧?
12/15 23:48, 15F

12/15 23:58, , 16F
如果AB 寫在同個.h就A先寫B就看得到阿
12/15 23:58, 16F

12/15 23:59, , 17F
不同.h ~class B所在的.h include a.h也就ok了吧
12/15 23:59, 17F

12/16 00:07, , 18F
他是說typedef寫在class A裡吧 那不繼承就看不到阿
12/16 00:07, 18F

12/16 00:15, , 19F
這裡的class A/B/C是不是要換成header file A.h/B.h/C.h
12/16 00:15, 19F

12/16 00:16, , 20F
這樣的意思啊? 總覺得我看兩遍還是不看不懂要表達什麼
12/16 00:16, 20F

12/16 00:16, , 21F
class應該不能當作include的受詞對象吧
12/16 00:16, 21F

12/16 00:24, , 22F
A大我覺得你好像有點誤解 繼承耶 A裡面也並沒有這container阿
12/16 00:24, 22F

12/16 00:25, , 23F
繼承只是擁有老爸的所有東西 類似在B裡面有個A 的instance
12/16 00:25, 23F

12/16 00:25, , 24F
但跟他所問的case完全無關阿
12/16 00:25, 24F

12/16 00:33, , 25F
x不是container耶 是data type 已經在class裡宣告的data type
12/16 00:33, 25F

12/16 00:34, , 26F
要被其他class看到只能靠繼承吧
12/16 00:34, 26F

12/16 00:35, , 27F
抱歉 我的誤解讓大家對我的問題有所誤會
12/16 00:35, 27F

12/16 00:35, , 28F
另外h大 我就是推測他是寫多個class在一起 但是用include
12/16 00:35, 28F

12/16 00:35, , 29F
其實應該是把class都改成head file才對
12/16 00:35, 29F

12/16 00:35, , 30F
來說明 才會猜他是想說繼承
12/16 00:35, 30F

12/16 00:36, , 31F
嗚 剛推完 我就被原po打臉T___T
12/16 00:36, 31F

12/16 00:36, , 32F
我的確是想讓class B去繼承class A, 但是目前沒繼承
12/16 00:36, 32F

12/16 00:36, , 33F
的理由 所以我沒用繼承 , 單純的去include A.h
12/16 00:36, 33F

12/16 00:37, , 34F
不見得讓其他人了解為什麼要include A.h
12/16 00:37, 34F

12/16 00:38, , 35F
要被其他class看到只能靠繼承吧 這句話不對吧 繼承跟這無關吧
12/16 00:38, 35F

12/16 00:39, , 36F
唉呀 是我的表達錯誤讓你有錯誤的推測 真是抱歉
12/16 00:39, 36F

12/16 00:39, , 37F
改一下文章好了
12/16 00:39, 37F
※ 編輯: anotherday 來自: 140.122.184.220 (12/16 00:39)

12/16 00:40, , 38F
不是.... 我是想確定 為什麼要說繼承才看得到那type?
12/16 00:40, 38F

12/16 00:40, , 39F
就是namespace解決問題,沒必要搞太復雜
12/16 00:40, 39F

12/16 00:41, , 40F
沒必要繼承, include A.h就可以了
12/16 00:41, 40F

12/16 00:41, , 41F
我是覺得include A.h的可讀性太差 , 所以才有這個疑問
12/16 00:41, 41F

12/16 00:41, , 42F
只要能夠在B之前定義class A 就能夠讓B看到那type了阿
12/16 00:41, 42F

12/16 00:43, , 43F
意思是再抽出一個.h,比如common.h,把共同需要的定義都塞進去
12/16 00:43, 43F

12/16 00:43, , 44F
typedef寫在class A裡面的話 其他人不是看不到? 我記錯@@?
12/16 00:43, 44F

12/16 00:43, , 45F
要看到就是要include A.h
12/16 00:43, 45F

12/16 00:45, , 46F
主要是看不看得到 跟繼承觀念上 一點關係都沒有阿
12/16 00:45, 46F

12/16 00:45, , 47F
TO Ag2S A::data_type ....
12/16 00:45, 47F

12/16 00:45, , 48F
當然,需要public...
12/16 00:45, 48F

12/16 00:46, , 49F
dp2大說的就是我剛剛跟其他人討論出來的答案
12/16 00:46, 49F

12/16 00:46, , 50F
樓上 我知道 所以我說如果是寫在class A裡(private)
12/16 00:46, 50F

12/16 00:47, , 51F
喔private不行0.0 protected才對
12/16 00:47, 51F

12/16 00:47, , 52F
的話 就要靠繼承來看到A::x沒錯吧
12/16 00:47, 52F

12/16 00:48, , 53F
反正我誤解原po意思就對了= =
12/16 00:48, 53F

12/16 00:49, , 54F
沒錯..Orz..
12/16 00:49, 54F

12/16 00:50, , 55F
喔 還有friend也行 不過friend還是少用得好= =a
12/16 00:50, 55F
文章代碼(AID): #1B9wUuVM (C_and_CPP)
文章代碼(AID): #1B9wUuVM (C_and_CPP)