作者ray3226 (邦)
看板C_and_CPP
標題[問題] 有關存取class的private data member
時間Wed Dec 16 23:31:31 2009
想請問各位板友一個小問題...
請問:
如何在一個class的member function裡存取另一個class的private data member?
譬如說在Matrix這個class裡的函式
如果我傳一個VectorD這個class的object進去
想要存取裡頭的data member
題目要求要用VectorD下已經宣告的inline function
來讓外界access它的data member
class VectorD{
public:
//為了方便閱讀只貼出有問題的部分
inline double * GetDirectAccess() {return _data;}
inline int GetSize() {return _size;}
private:
int _size;
double * _data;
};
我在定義Matrix的member function裡
(Matrix裡也用了一個指標_data來存取一個偽二維矩陣)
但是無論是這樣寫:
// get the row vector
void Matrix::GetRowVector(int index, VectorD & receiver)
{
for (int i = 0; i < _cols; i++)
receiver.GetDirectAccess[i] = _data[index * _cols + i];
}
還是這樣寫:
// get the row vector
void Matrix::GetRowVector(int index, VectorD & receiver)
{
for (int i = 0; i < _cols; i++)
*(receiver.GetDirectAccess + i) = _data[index * _cols + i];
}
都會出錯
我不曉得問題在哪裡...
它回傳的不是一個指標嗎?
為什麼不讓我存取呢?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.35.1.66
1F:→ VictorTom:請透過public method, 不然就是用friend....@_@" 12/16 23:35
2F:→ adrianshum:你沒有存取什麼 private member 吧,重點是method call 12/16 23:36
3F:→ adrianshum:請加括號 12/16 23:36
4F:→ adrianshum:即是: receiver.GetBlablabla()[i] 12/16 23:37
5F:→ ray3226:謝謝兩位板大的回答 加括號真的就可以了!! 12/16 23:41
6F:→ ray3226:題目是給header file要用現有的東西 不然我也想用friend 12/16 23:43
7F:推 VictorTom:嗚~~跟著被虎弄到了, 還是a大眼睛比較利....Orz 12/16 23:48
8F:→ ray3226:不好意思 小聲問一下method call是甚麼? 12/16 23:50
9F:→ ray3226:意思是我不傳東西進去的函式還是要寫()只是()內不擺東西? 12/16 23:51
10F:推 VictorTom:簡單的說就是class的member function吧....@_@" 12/16 23:52
11F:→ VictorTom:對....Orz 12/16 23:52
12F:→ ray3226:我懂了 謝謝樓上! 12/16 23:54