3

非静的メンバー参照は特定のオブジェクトに関連している必要があるというエラーが表示される理由がわかりません。

CDrawView::Shape私が宣言した列挙型ですCDrawView

enum shape{line, rect, elli};
shape current_shape;

これは私の他のクラスです

class Shapemaker
{
public:

    CDrawView view;
    static void Create(CDrawView::shape )
    {
        if(view.current_shape == view.line)
        {
            view.m_shape.reset(new Line());
        }
        else if(view.current_shape == view.rect)
        {
            view.m_shape.reset(new Rect());
        }
    }
}

このエラーを回避するためのベスト プラクティスは何ですか

4

2 に答える 2

4

まず、関数はstaticであるため、 にはアクセスできませんviewviewは の非静的メンバーでありShapemaker、特定のインスタンス o にのみ関連付けられているためですShapemakerview必要があるかstaticCreate関数がそうであってはなりません。もう1つの選択肢はview、メンバーであってはならず、Create関数内で作成する必要があるというものです。

また、列挙定数の名前はCDrawViewクラスのスコープ内にあり、次のようにクラス名を介してアクセスされます。

if(view.current_shape == CDrawView::line)

.演算子は、オブジェクトの非静的メンバーにアクセスするためのものです。またはviewと呼ばれる非静的メンバーがありません。linerect

于 2013-03-28T20:04:56.143 に答える
1

viewはクラス CDrawView の非静的オブジェクトです。 はクラスの Create静的関数です。 のオブジェクトを構築しない場合ShapeMaker、 のインスタンスはありませんが、 は ShapeMaker のどのオブジェクトにも関連付けられていません。静的メンバー関数内で非静的メンバーを使用することはできません。viewShapeMakerCreate

于 2013-03-28T20:10:05.853 に答える