2013-04-06 104 views
1

我有以下设置:无法访问静态方法中的私有类成员?

//.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

我知道我可能做一些非常愚蠢的,但是这是怎么回事呢?为什么我不能在我的静态成员函数中使用我的私有成员变量,就像我应该能够的那样?

+0

静态成员函数不能访问非静态数据成员是合乎逻辑的原因。它是静态成员函数定义的一部分。 – chris 2013-04-06 05:19:20

+3

如果你有一个**对象**与这些数据成员一起使用,它可能会非常有帮助。您正在使用静态类功能。它没有任何对象,因此没有成员。使函数成为非静态函数,将参数传递为参数,或者使成员静态。以上任何一项都可以工作。选择合适的人来满足你的需求。 – WhozCraig 2013-04-06 05:20:07

+0

所以我几乎无法访问它们呢?我认为静态函数的要点是能够在没有对象的情况下被调用,但仍然具有与被对象调用相同的用途。 – xcdemon05 2013-04-06 05:21:26

回答

12

您不能访问非静态成员一个static方法,除非你明确地使成员函数内部可用的对象实例内。(通行证对象实例明确的参数,或者使用可以在功能内被访问的全局实例)

对于非静态成员函数,隐式指针被作为函数的第一个参数传递给参数thisthis指针在成员函数内部被取消引用以访问成员。 static成员不会通过隐含的this指针传递,因此您无法访问该函数内的非静态成员,除非您在成员函数内显式获取该对象。

相关问题