我在CDrawView
课程中有这个枚举声明:
enum shape{line, rect, elli};
在我的另一个名为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();
}
我通过Shapemaker::shapeCreate(current_shape)
来调用该函数,其中current_shape
只是enum shape
的一个实例。
shape current_shape;
这给了我编译错误:
error C2653: 'CDrawView' : is not a class or namespace name
Shapemaker.h(7):
我不完全确定这是使用枚举和函数的正确方法,还是比较枚举。
error C2061: syntax error : identifier 'shape'
'Shapemaker::shapeCreate' : function does not take 1 arguments
class CDrawView : public CScrollWindowImpl<CDrawView>
{
public:
CDrawView();
enum shape{line, rect, elli};
shape current_shape;
//...
};
定义Shapemaker::shapeCreate()
的文件位于顶部#include "CDrawView.h"
。
答案 0 :(得分:4)
使用CDrawView::line
代替CDrawView::shape.line
。
CDrawView::shape
仅在您需要类型的地方使用 - 例如用于声明变量。
A::shape var = A::line;
以下代码也毫无意义
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();
}
将其更改为
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();
}
或者甚至更好地将其更改为使用switch case
。
原始代码有很多问题
s
。CDrawView::line
是一个常数 - 它总是为0.所以它总会返回true
。您的函数将始终返回new Line()
。if
也在比较2个常量,如果它们到达了它们也会返回true
- 它们不会是。{/ li>
醇>