无法访问静态方法内的私有类成员?

时间:2013-04-06 05:18:14

标签: c++ windows class methods static

我有以下设置:

//.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);
    }
}

但是,在.cpp文件中实现DrawRowOfPixels()方法时,我会在Cell类的所有成员变量中获得错误。 (即mCellStartingpoint,mXoffset和mYoffset)

  

错误C2228:'。''的左边必须有class / struct / union

     

错误C2597:非法引用非静态成员'Cell :: mXoffset'

     

错误C3867:'Cell :: mXoffset':函数调用缺少参数列表;使用'&amp; Cell :: mXoffset'创建指向成员的指针

     

错误:非静态成员引用必须与特定对象相关

我知道我可能正在做一些非常愚蠢的事情,但这里发生了什么?为什么我不能像我应该能够在我的静态成员函数中使用我的私有成员变量?

1 个答案:

答案 0 :(得分:14)

除非在成员函数中明确提供对象实例,否则无法访问static方法中的非静态成员。(将对象实例显式地作为参数传递或使用可以访问的全局实例在函数内部

对于非静态成员函数,将隐式this指针作为函数的第一个参数传递。在成员函数内取消引用this指针以访问成员。 static成员不会使用隐式this指针传递,因此除非在成员函数中显式获取对象,否则无法访问函数内的非静态成员。