作者zesiva (呼拉拉)
看板C_and_CPP
標題[問題] 關於inline與class的問題
時間Mon Apr 13 15:39:05 2009
若是這樣寫 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
1F:推 layan:hi, 這是語法的問題 04/13 16:37
2F:→ layan:若你要inline一個 func, 你應該要把 inline implementation 04/13 16:38
3F:→ layan:放在 .h 裡, 也就是把你的 a.c 裡的那個 implementation 04/13 16:38
4F:→ layan:放在 a.h 裡, 這樣就 OK 了 04/13 16:39
5F:→ QQ29:可是我用簡單的寫法試著他這樣實作宣告分開 也沒事耶我用VC8 04/13 16:42
6F:→ layan:To QQ29, 這樣本來就可以過阿, 只是你在別的.cpp 要 call 04/13 16:46
7F:→ layan:該 func 時, linker 會跟你說它找不到它的 implemntation. 04/13 16:46
8F:→ layan:其實這樣的寫法大多用在 private member function. 04/13 16:47
9F:推 QQ29:真的耶 分開在不同檔案 就不行了 謝謝你 04/13 16:49
10F:→ zesiva:請問那是因為是class裡面的func才有這種限制嗎 04/13 16:56
11F:→ zesiva:若不在class裡面的func要inline也要定義在.h嗎 謝謝 04/13 16:56
12F:推 QQ29:請教一下 為什麼你沒去呼叫他就沒事 呼叫了才說 無法解晰的 04/13 17:05
13F:→ QQ29:外部符號呢? 可以講一下原理嘛@@ 04/13 17:06