C++ 如何生成接收枚举的函数

C++ 如何生成接收枚举的函数,c++,function,enums,C++,Function,Enums,我的CDrawView类上的枚举是 class Shapemaker { public: static Shape * shapeCreate(CDrawView::shape sh); }; 当我在上调用Shapemaker::shapeCreate(current_shape)时,我得到错误c2653CDrawView:不是Shapemaker.h上的类或命名空间名称,如果它是另一个类的enum成员,则可以将其引用为类的名称::Color,但它必须公开可见: enum shape{li

我的CDrawView类上的枚举是

class Shapemaker
{
public:
  static Shape * shapeCreate(CDrawView::shape sh);
};

当我在上调用
Shapemaker::shapeCreate(current_shape)
时,我得到错误c2653
CDrawView
:不是
Shapemaker.h

上的类或命名空间名称,如果它是另一个类的
enum
成员,则可以将其引用为
类的名称::Color
,但它必须公开可见:

enum shape{line, rect, elli};
shape current_shape;

假设你有以下几点:

void function(nameoftheClass:Color input);
采用该枚举的函数如下所示:

class C {
    public:
        enum E {
            HERP,
            DERP
        };
 };

这最终都是名称空间的问题。再看一下这个问题的答案,明确地说,您不能在函数的参数列表中使用关键字
enum
,直接使用带有适当名称空间的enum名称


我试图传递颜色变量enum,但它给了我一个编译错误,表示“nameofclass”不是类或名称空间

您需要在使用前放置声明,这意味着您需要正确的头文件:

MyClass.h

void foo(C::E e) {
   // do stuff with e
}
class MyClass {
    public:
        enum Color {
            Red,
            Green,
            Blue
        };
};
MyOtherClass.h

void foo(C::E e) {
   // do stuff with e
}
class MyClass {
    public:
        enum Color {
            Red,
            Green,
            Blue
        };
};

这可能是最简单的做法:

#include "MyClass.h" // This is required.

// Now you can use MyClass::Color freely.

现在,如果您的编译器没有将Shapemaker识别为类名,那么我认为您在声明Otherclass之前没有包含它的头文件。

使用
void函数(int)
无效函数(类的名称::颜色)我试图传递颜色变量enum,但它给了我一个编译错误,说明“nameofclass”不是类或名称空间。您能告诉我们包含enum的类吗?包括它可能被包装的任何名称空间或类@andre@user2221404:否,我们希望查看
nameofclass
CDrawView
。我尝试这样做,但当我传递枚举时,我收到一条消息,说该类不是类或命名空间“nameofclass”不是类或命名空间。我将参数作为函数(nameofenum)传递,它给出了一个可能的结果,然后您可以添加定义
enum
的类的完整声明,我们可能会更有用我添加了发生在我身上的事情的完整声明@dan.lecocqsay我将E声明为em。当我执行foo(em)时当我试图编译时,它说C类不是一个名称空间或类问题是当我试图调用函数时,我不断收到一个错误,说该类不是一个类或名称空间你能检查我所做的新编辑吗,如果你不介意,如果你知道它为什么不起作用,你介意解释一下吗?我想你忘了在使用静态方法的文件中包含
CDrawView
的标题。你能检查一下我添加的@Magtheridon96的新编辑吗。我在顶部包含了CDrawView.h,但当我调用fun()时,它里面包含了什么。颜色为红色、黄色或趣味(红色)或枚举颜色的实例。趣味(色彩);你们都可以使用fun(颜色(红色));或色霉色;fun(mycolor);