这个代码在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)
我需要一种方法来做这样的事情:“东西::某事”!
答案 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
};