elF*_*nzo 0 c++ enums function
我的CDrawView课堂上有这个枚举声明:
enum shape{line, rect, elli};
Run Code Online (Sandbox Code Playgroud)
在我的另一个名为Shapemaker的类中,我有一个函数应该从CDrawView该类中获取枚举并对其进行评估
Shape* Shapemaker::shapeCreate(CDrawView::shape)
{
if(CDrawView::shape.line == 0)
return new Line();
else if(CDrawView::shape.rect == 1)
return new Rect();
else if (CDrawView::shape.ellip == 2)
return new Ellip();
}
Run Code Online (Sandbox Code Playgroud)
我通过执行Shapemaker::shapeCreate(current_shape)where current_shape只是该实例的实例来调用该函数enum shape。
shape current_shape;
Run Code Online (Sandbox Code Playgroud)
这给了我编译错误:
error C2653: 'CDrawView' : is not a class or namespace name
Shapemaker.h(7):
Run Code Online (Sandbox Code Playgroud)
我不确定这是否是使用枚举和函数甚至比较枚举的正确方法。
error C2061: syntax error : identifier 'shape'
'Shapemaker::shapeCreate' : function does not take 1 arguments
Run Code Online (Sandbox Code Playgroud)
class CDrawView : public CScrollWindowImpl<CDrawView>
{
public:
CDrawView();
enum shape{line, rect, elli};
shape current_shape;
//...
};
Run Code Online (Sandbox Code Playgroud)
该文件中定义Shapemaker::shapeCreate()确实#include "CDrawView.h"在顶部。
使用CDrawView::line代替CDrawView::shape.line。
该CDrawView::shape是你需要一个类型只使用过-例如用于声明一个变量。
A::shape var = A::line;
Run Code Online (Sandbox Code Playgroud)
同样下面的代码是没有意义的
Shape* Shapemaker::shapeCreate(CDrawView::shape)
{
if(CDrawView::shape.line == 0)
return new Line();
else if(CDrawView::shape.rect == 1)
return new Rect();
else if (CDrawView::shape.ellip == 2)
return new Ellip();
}
Run Code Online (Sandbox Code Playgroud)
更改为
Shape* Shapemaker::shapeCreate(CDrawView::shape s)
{
if(s == CDrawView::line)
return new Line();
else if(s == CDrawView::rect)
return new Rect();
else if (s == CDrawView::ellip)
return new Ellip();
}
Run Code Online (Sandbox Code Playgroud)
甚至更好地将其更改为使用switch case。
原始代码有很多问题
s。CDrawView::line是一个常数-始终为0。因此它将始终返回true。您的函数将始终返回new Line()。ifs也在比较2个常量,true如果曾经达到过,它们也会返回-不会。