枚举作为函数参数

时间:2010-12-25 05:58:42

标签: c++ class enums scope

这个代码在c ++中有什么问题吗?

enum OpenMode{
    Read = 0x1,
    Write = 0x2,
    Append = 0x4
};

void main(){
    open_file("./something", OpenMode::Write); //!!!!!!!!!
}

void open_file(string name, OpenMode om){
    .
    .
    .
}

我需要做的就是将枚举传递给函数而不创建它的实例。

好的,你有没有注意到ios的工作方式?例如:

somefile.open(file_name, ios::in | ios::out)

我需要一种方法来做这样的事情:“东西::某事”!

2 个答案:

答案 0 :(得分:2)

是的,有些不对劲。由enum创建的名称会进入包含enum的范围,但不会被enum的名称限定。

在C ++ 0x中,有一个新的“枚举类”语法嵌套枚举中的名称。

C ++ 03中的一种解决方法是使用结构或命名空间,即:

namespace OpenMode
{
    enum OpenMode
    {
        Read = 0x1,
        Write = 0x2,
        Append = 0x4
    };
}

// blah blah OpenMode::Write

不幸的是,它还会将类型名称更改为OpenMode::OpenMode

答案 1 :(得分:0)

main的签名应该是

 int main()

int main(int, char *[])
在你的枚举中

缺少逗号

enum OpenMode
{
    Read   = 0x1,  // use commas to delimit enum constants, not semicolons
    Write  = 0x2,
    Append = 0x4
};