【问题标题】:How to make a function that receives an enum如何制作一个接收枚举的函数
【发布时间】:2013-03-19 12:11:57
【问题描述】:
class Shapemaker
{
public:
  static Shape * shapeCreate(CDrawView::shape sh);
};

我的 CDrawView 类的枚举是

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

当我调用 Shapemaker::shapeCreate(current_shape) 时,我收到错误 c2653CDrawView : is not a class or namespace name on shapemaker.h

【问题讨论】:

  • 使用void function (int);void function (nameoftheClass::Color);
  • 我试图传递颜色变量枚举,但它给了我一个编译错误,说“nameoftheclass”不是一个类或命名空间
  • 你能告诉我们包含枚举的类吗?包括它可能被包装的任何命名空间或类。
  • 我添加了代码@andre
  • @user2221404: 诺诺,我们希望看到nameoftheClassCDrawView

标签: c++ function enums


【解决方案1】:

这可能是最简单的做法:

class Shapemaker{
    public:
    enum Color { //your colors here }
};

class Otherclass{
    void fun(Shapemaker::Color);
};

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

【讨论】:

  • 但是当我调用 fun() 时,里面会发生什么。红色、黄色或 fun(red) 或枚举 Color 的一个实例。有趣(颜色);
  • 你可以同时使用 fun(Color(red));或颜色 mycolor;有趣(我的颜色);
【解决方案2】:

我试图传递颜色变量枚举,但它给了我一个编译错误,说“nameoftheclass”不是类或命名空间

您需要在使用之前放置一个声明,这意味着您需要适当的头文件:

MyClass.h

class MyClass {
    public:
        enum Color {
            Red,
            Green,
            Blue
        };
};

MyOtherClass.h

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

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

【讨论】:

  • 你能检查一下我添加的新编辑@Magtheridon96。我在顶部包含 CDrawView.h
【解决方案3】:

这最终都是命名空间的问题。也看看这个问题的答案,绝对不能在函数的参数列表中使用关键字enum,直接使用带有适当命名空间的枚举名称。

namespaces for enum types - best practices

【讨论】:

  • 问题是,当我尝试调用该函数时,我不断收到错误消息,指出该类不是类或命名空间
  • 你能检查一下我所做的新编​​辑吗?如果你不介意,如果你知道它为什么不起作用,你介意解释一下吗?
  • 我假设您忘记在使用静态方法的文件中包含 CDrawView 的标头。
【解决方案4】:

假设你有如下:

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

采用该枚举的函数如下所示:

void foo(C::E e) {
   // do stuff with e
}

【讨论】:

  • 说我将 E 声明为 em。当我执行 foo(em) 时,当我尝试编译时,它说 C 类不是命名空间或类
【解决方案5】:

如果它是另一个类的 enum 成员,那么您可以将其引用为 nameoftheClass::Color,但它必须是公开可见的:

void function(nameoftheClass:Color input);

【讨论】:

  • 我尝试这样做,但是当我通过枚举时,我收到一条消息说该类不是类或命名空间
  • "nameoftheclass" 不是类或命名空间。我将参数作为函数(nameofenum)传递,它给了我
  • 也许,你可以添加定义enum的类的完整声明,我们可能会得到更多帮助
  • 我添加了发生在我身上的完整声明@dan.lecocq
猜你喜欢
  • 1970-01-01
  • 2010-09-11
  • 1970-01-01
  • 1970-01-01
  • 2022-12-13
  • 2012-06-27
  • 1970-01-01
  • 2016-12-26
相关资源
最近更新 更多