我不明白为什么视图给我一个非静态成员引用的错误必须是相对于特定对象的。
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());
}
}
}
避免此错误的最佳做法是什么
答案 0 :(得分:4)
首先,由于该功能为static
,因此无法访问view
。这是因为view
是Shapemaker
的非静态成员,所以只与特定实例o Shapemaker
相关联。 view
必须是static
或Create
函数不应该是view
。另一种选择是Create
不应该是成员,应该在CDrawView
函数内创建。
此外,枚举常量的名称在if(view.current_shape == CDrawView::line)
类的范围内,并通过类名访问,如下所示:
.
view
运算符用于访问对象的非静态成员。 line
没有名为rect
或{{1}}的非静态成员。
答案 1 :(得分:1)
view
是类CDrawView的非静态对象,Create
是ShapeMaker
类的静态函数,如果不构造,则不会有view
的实例ShapeMaker
的对象,而Create
与ShapeMaker的任何对象都没有关联。你不能在静态成员函数中使用非tatic成员。