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
。