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)

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

最佳答案

是的,出了点问题。由enum创建的名称进入包含enum的范围,但不受enum的名称限制。

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

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

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

// blah blah OpenMode::Write

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

10-08 19:25