【发布时间】:2013-03-28 15:47:54
【问题描述】:
我有以下设置:
//.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' 创建指向成员的指针
错误:非静态成员引用必须相对于特定对象
我知道我可能正在做一些非常愚蠢的事情,但这里发生了什么?为什么我不能在我的静态成员函数中使用我的私有成员变量?
【问题讨论】:
-
静态成员函数无法访问非静态数据成员是有逻辑的。它是静态成员函数定义的一部分。
-
如果您有一个 object 与这些数据成员一起使用,可能会有很大帮助。您正在使用静态类函数。它没有对象,因此没有成员。使函数非静态,将对象作为参数传入,或使成员静态。以上任何一项都可以。选择适合您需要的。
-
那么我真的无法访问它们吗?我认为静态函数的重点是能够在没有对象的情况下调用,但仍然具有与对象调用相同的用途。
-
@user2057387,如果它没有对象,它使用哪个对象的数据成员集?
-
为什么这些事情只有在我在互联网上自欺欺人之后才有意义......
标签: c++ windows class methods static