我有以下設置:無法訪問靜態方法中的私有類成員?
//.h
class Cell
{
private:
POINT mCellStartingPoint;
int mXoffset;
int mYoffset;
public:
static void DrawRowOfPixels(int yoff);
Cell();
~Cell();
};
//.cpp
void Cell::DrawRowOfPixels(int yoff)
{
HDC dc = GetDC(NULL);
COLORREF red = 0xFF0000;
for(int i = mCellStartingPoint.x; i < mXoffset; i++)
{
SetPixel(dc, mCellStartingPoint.x + i, mCellStartingPoint + yoff, red);
}
}
然而,在實施DrawRowOfPixels時()在.cpp文件的方法,我在所有的細胞類的成員變量的出現錯誤。 (即mCellStartingpoint,mXoffset和mYoffset)
error C2228: left of '.x' must have class/struct/union
error C2597: illegal reference to non-static member 'Cell::mXoffset'
error C3867: 'Cell::mXoffset': function call missing argument list; use '&Cell::mXoffset' to create a pointer to member
error: A nonstatic member reference must be relative to a specific object
我知道我可能做一些非常愚蠢的,但是這是怎麼回事呢?爲什麼我不能在我的靜態成員函數中使用我的私有成員變量,就像我應該能夠的那樣?
靜態成員函數不能訪問非靜態數據成員是合乎邏輯的原因。它是靜態成員函數定義的一部分。 – chris 2013-04-06 05:19:20
如果你有一個**對象**與這些數據成員一起使用,它可能會非常有幫助。您正在使用靜態類功能。它沒有任何對象,因此沒有成員。使函數成爲非靜態函數,將參數傳遞爲參數,或者使成員靜態。以上任何一項都可以工作。選擇合適的人來滿足你的需求。 – WhozCraig 2013-04-06 05:20:07
所以我幾乎無法訪問它們呢?我認爲靜態函數的要點是能夠在沒有對象的情況下被調用,但仍然具有與被對象調用相同的用途。 – xcdemon05 2013-04-06 05:21:26