2

我有以下设置:

//.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:“.x”左侧必须有类/结构/联合

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

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

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

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

4

1 回答 1

16

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

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

于 2013-04-06T05:22:07.940 回答