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 に答える