[問題] 關於inline與class的問題

看板C_and_CPP (C/C++)作者 (呼拉拉)時間16年前 (2009/04/13 15:39), 編輯推噓3(3010)
留言13則, 3人參與, 最新討論串1/2 (看更多)
若是這樣寫 compiler會過 但是要是你有呼叫 Value 這個函式的話 VC 2005就會顯示compiler error link1120, 無法解析的外部符號 a.h class TreeNode { private: public: NodeVector * Children; TreeNode * Parent; int Item; bool ItemIsIntra; int ItemsetNumber; int Support; TreeNode( int anItem = -1, bool ItemIsIntra = false, int Sup = 0, TreeNode * aParent = NULL ); inline TreeNode * FindChild( TreeNode * Child ); inline void Value( int anItem , bool xx , int Sup , TreeNode * aParent ); ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ~TreeNode(); }; a.c inline void TreeNode::Value( int anItem, bool xx, int Sup, TreeNode * aParent ){ Children = NULL; Parent = aParent; ItemsetNumber = 0; Item = anItem; ItemIsIntra = xx; Support = Sup; } 若是把inline拿掉就沒問題了, 請問為什麼不能inline呢, 她只是給值而已, 為什麼一 inline就錯誤呢 研究了一天 還是不得其解 只好PO上來問問大家 > < 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.134.26.131

04/13 16:37, , 1F
hi, 這是語法的問題
04/13 16:37, 1F

04/13 16:38, , 2F
若你要inline一個 func, 你應該要把 inline implementation
04/13 16:38, 2F

04/13 16:38, , 3F
放在 .h 裡, 也就是把你的 a.c 裡的那個 implementation
04/13 16:38, 3F

04/13 16:39, , 4F
放在 a.h 裡, 這樣就 OK 了
04/13 16:39, 4F

04/13 16:42, , 5F
可是我用簡單的寫法試著他這樣實作宣告分開 也沒事耶我用VC8
04/13 16:42, 5F

04/13 16:46, , 6F
To QQ29, 這樣本來就可以過阿, 只是你在別的.cpp 要 call
04/13 16:46, 6F

04/13 16:46, , 7F
該 func 時, linker 會跟你說它找不到它的 implemntation.
04/13 16:46, 7F

04/13 16:47, , 8F
其實這樣的寫法大多用在 private member function.
04/13 16:47, 8F

04/13 16:49, , 9F
真的耶 分開在不同檔案 就不行了 謝謝你
04/13 16:49, 9F

04/13 16:56, , 10F
請問那是因為是class裡面的func才有這種限制嗎
04/13 16:56, 10F

04/13 16:56, , 11F
若不在class裡面的func要inline也要定義在.h嗎 謝謝
04/13 16:56, 11F

04/13 17:05, , 12F
請教一下 為什麼你沒去呼叫他就沒事 呼叫了才說 無法解晰的
04/13 17:05, 12F

04/13 17:06, , 13F
外部符號呢? 可以講一下原理嘛@@
04/13 17:06, 13F
文章代碼(AID): #19ukmQaR (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #19ukmQaR (C_and_CPP)