[問題] 宣告外部類別使用

看板C_and_CPP (C/C++)作者 (加油!!變強)時間16年前 (2010/05/07 09:58), 編輯推噓3(3011)
留言14則, 3人參與, 最新討論串1/1
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) ( 未必需要依照此格式,文章條理清楚即可 ) 遇到的問題: (題意請描述清楚) 外部類別的宣告使用 希望得到的正確結果: 能在除建構子以外的地方使用外部類別 程式跑出來的錯誤結果: 在標頭檔宣告外部類別那行出現 *******.h(35) : error C2143: 語法錯誤 : 遺漏 ';' 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) vc++ windows 有問題的code: (請善用置底文標色功能) 示意程式碼如下 標頭檔: Dog.h 內容: class Dog { public: Dog(); String getHoskeyName(); private: Hoskey *dog1;//註1 }; class Hoskey //也是在Dog.h內 { public: Hoskey(); String getName(); private: String name; }; 原始檔: Dog.cpp Dog::Dog() { dog1=new Hoskey;//註1-1 Hoskey *dog1=new Hoskey;//註2 dog1->getName();//註2-1 } String Dog::getHoskeyName() { return dog1->getName();//註1-2 } Hoskey::Hoskey() { name="FLASH" } String Hoskey::getName() { return name; } 補充說明: 在Dog裡面要呼叫Hoskey的函式getName() 有兩個狀況 錯誤的 有註1,1-1,1-2,沒註2,2-1 為了讓Hoskey能讓Dog的全域使用,能在Dog的函式呼叫Hoskey 在Dog的定義中宣告Hoskey (註1) 但是卻不能宣告 不是明明將Hoskey定義在同一檔案裡了嗎??? 正確的 有註2,2-1 沒註1,1-1,1-2 只能在Dog的建構子中宣告Hoskey並使用它的函式 但在其他Dog的函式裡不能使用Hoskey 有人可以幫忙嗎?? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.56.71.90 ※ 編輯: goodwise 來自: 61.56.71.90 (05/07 10:00)

05/07 09:59, , 1F
class的宣告, 大括號後面要加';' compiler不是告訴你了
05/07 09:59, 1F

05/07 09:59, , 2F
嗎....XD
05/07 09:59, 2F

05/07 10:00, , 3F
class Dog { /* ... */ }; // 最後要有分號
05/07 10:00, 3F

05/07 10:05, , 4F
本來就有打; 是剛剛筆誤 所以也不是這個問題
05/07 10:05, 4F
※ 編輯: goodwise 來自: 61.56.71.90 (05/07 10:05)

05/07 10:06, , 5F
但還是謝謝您的提醒
05/07 10:06, 5F

05/07 10:16, , 6F
Hoskey class 要放在 Dog 前面
05/07 10:16, 6F

05/07 10:16, , 7F
不然就要用 forward declaration
05/07 10:16, 7F

05/07 10:17, , 8F
然後你給了錯誤的 compiler error message
05/07 10:17, 8F

05/07 10:30, , 9F
是.h中Hoskey要在Dog的前面嗎??
05/07 10:30, 9F

05/07 10:36, , 10F
對, 不然compile到Dog裡的Hoskey時, compiler還不認得
05/07 10:36, 10F

05/07 10:37, , 11F
Hoskey是什麼東西; 不然就是在最上面直接寫兩個class
05/07 10:37, 11F

05/07 10:38, , 12F
的宣告, 即class Hoskey; class Dog{}; class Hoskey{};
05/07 10:38, 12F

05/07 10:38, , 13F
也就是l大在上面說的forward declaration:)
05/07 10:38, 13F

05/07 10:39, , 14F
我了解了 這樣就沒錯誤了 謝謝您 受益良多
05/07 10:39, 14F
文章代碼(AID): #1ButF2M0 (C_and_CPP)
文章代碼(AID): #1ButF2M0 (C_and_CPP)