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

时间:2013-03-28 20:03:30

标签: c++ static enums

我不明白为什么视图给我一个非静态成员引用的错误必须是相对于特定对象的。

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());
        }
    }
}

避免此错误的最佳做法是什么

2 个答案:

答案 0 :(得分:4)

首先,由于该功能为static,因此无法访问view。这是因为viewShapemaker的非静态成员,所以只与特定实例o Shapemaker相关联。 view必须是staticCreate函数不应该是view。另一种选择是Create不应该是成员,应该在CDrawView函数内创建。

此外,枚举常量的名称在if(view.current_shape == CDrawView::line) 类的范围内,并通过类名访问,如下所示:

.

view运算符用于访问对象的非静态成员。 line没有名为rect或{{1}}的非静态成员。

答案 1 :(得分:1)

view是类CDrawView的非静态对象,CreateShapeMaker类的静态函数,如果不构造,则不会有view的实例ShapeMaker的对象,而Create与ShapeMaker的任何对象都没有关联。你不能在静态成员函数中使用非tatic成员。