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

我的 CDrawView 类的枚举是

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

当我打电话Shapemaker::shapeCreate(current_shape)时,我收到错误 c2653 CDrawView: is not a class or namespace name onshapemaker.h

4

5 回答 5

1

这可能是最简单的事情:

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

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

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

于 2013-03-28T21:35:26.420 回答
0

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

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

我的类.h

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

我的其他类.h

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

// Now you can use MyClass::Color freely.
于 2013-03-28T21:25:33.567 回答
0

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

void function(nameoftheClass:Color input);
于 2013-03-28T21:15:46.313 回答
0

假设您有以下内容:

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

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

void foo(C::E e) {
   // do stuff with e
}
于 2013-03-28T21:16:21.380 回答
0

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

枚举类型的命名空间 - 最佳实践

于 2013-03-28T21:18:27.603 回答