作者james732 (好人超)
站內C_and_CPP
標題Re: [問題] C++改寫成C
時間Sun Jan 10 22:13:00 2010
※ 引述《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