我的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


CDrawView.h

class CDrawView : public CScrollWindowImpl<CDrawView>
{
  public:

   CDrawView();
   enum shape{line, rect, elli};
       shape current_shape;
       //...
};


定义Shapemaker::shapeCreate()的文件在顶部执行#include "CDrawView.h"

最佳答案

使用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-不会。

09-03 18:48