【问题标题】:Enum as a function parameter枚举作为函数参数
【发布时间】:2011-05-30 14:10:28
【问题描述】:

这段代码在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”!

【问题讨论】:

    标签: c++ class enums scope


    【解决方案1】:

    是的,有问题。由enum 创建的名称进入包含enum 的范围,它们不受enum 名称的限制。

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

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

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

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

    【讨论】:

    • 一切都好,除了你需要使用逗号作为枚举值分隔符。
    • @Johnsyweb:谢谢,我盲目地复制了原始代码而没有完全修复它。
    【解决方案2】:

    main 的签名应该是

     int main()
    

    int main(int, char *[])
    

    在你的枚举中缺少逗号

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

    【讨论】:

    • main 有很多不同的参数类型,但你说得对,返回类型必须是int。正确地用逗号分隔枚举值,而不是分号。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多