gpt4 book ai didi

c++ - 无法在静态方法中访问私有(private)类成员?

转载 作者:可可西里 更新时间:2023-11-01 10:52:58 29 4
gpt4 key购买 nike

我有以下设置:

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

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

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

最佳答案

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

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

关于c++ - 无法在静态方法中访问私有(private)类成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15847307/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com