0

我在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)wherecurrent_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"顶部。

4

1 回答 1

5

使用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.

原代码有很多问题

  1. 您没有函数参数的变量名称 - 我已将其更改为为变量命名s
  2. CDrawView::line是一个常数 - 它总是 0。所以它总是会返回true。您的函数将始终返回new Line()
  3. 其他ifs 也在比较 2 个常量,并且true如果它们曾经达到也会返回 - 他们不会。
于 2013-03-29T04:49:05.163 回答