看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《gary6296 (跳跳佑)》之銘言: : +++++++++++++++++++++++++++++++++++++++++++ : 以下是原始碼的部份 : class CRecord{ : public: : double mdPt[2]; : public: : CRecord() {}; : virtual ~CRecord() {}; : double distance(CRecord *to); : }; : +++++++++++++++++++++++++++++++++++++++++++++ : 以下是我自己改寫的部份 : struct CRecord : { : double mdPt[2]; : CRecord() {}; : virtual ~CRecord() {}; : double distance(CRecord *to); : }; : +++++++++++++++++++++++++++++++++++++++++++++ 在 C 語言裡,struct 裡面不能有 member function 也就是說上面三行紅色的都是不合法的 可能要改成這個樣子 void CRecord_constructor(struct CRecord *record); void CRecord_destructor(struct CRecord *record); double CRecord_distance(struct CRecord *from, struct CRecord *to); 在 C++ 裡面,可以省略掉 class 或 struct 關鍵字(上例綠色的部份) 但 C 語言是不能省掉的,一定要寫出來 當然,你的函式改成這樣子,呼叫這些函式的地方也必須做對應的修改 譬如 d = record1.distance(&record2); 可能要改成 d = CRecord_distance(&record1, &record2); 把 C++ 全面改寫成 C 是一件不小的工程...只能說加油了 希望你的程式裡沒有牽扯到太多的繼承與多型.... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.117.171.46 ※ 編輯: james732 來自: 140.117.171.46 (01/10 22:15)
johnhmj:C++的struct可以視為public class~ 01/10 22:22
gary6296:謝謝 我研究一下 不懂再問XD 01/10 22:52
gary6296:那這樣子的話我是不是就要宣告 CRecord_distance這些東西 01/10 23:02
james732:用原本的 CRecord 那個 distance 去改寫 01/10 23:05
gary6296:我不太懂...我剛試了一下他要我宣告的樣子 01/10 23:15
gary6296:field `CRecord_constructor' declared as a function 01/10 23:16
james732:你要先知道 C++ 的 member function 與 function 關係 01/10 23:17
sunneo:有繼承 多型的話 就要參考gtk的data link作法了 01/11 00:53
DJWS:strcut關鍵字可以利用typedef去掉 01/11 13:01