对于班级中的枚举......
不正确:
class MyClass{
public:
enum kHTTPMethods {GET,PUT,POST}
};
void MyClass::Func(){
kHTTPMethods method = kHTTPMethod.GET;
}
Run Code Online (Sandbox Code Playgroud)
1)我是否正确地说这不起作用,因为.
运算符只能用于类的对象(实例)?
正确:
void MyClass::Func(){
kHTTPMethods method = GET;
}
Run Code Online (Sandbox Code Playgroud)
2)我是否正确地说这是正确的,因为类的所有元素在类中变为全局范围?
那么,对于你的第一个问题,问题是枚举被放在了范围内class MyClass
.无论如何,无论你是否有一个对象,.
都不会让你引用枚举,你需要::
引用特定范围内的东西.以下内容将进行编译,但更正的MyClass::
范围不是必需的或有用的(即您可以说method = GET
因为func
范围相同GET
).
class MyClass
{
public:
enum kHTTPMethods {GET,PUT,POST};
void func() {
kHTTPMethods method = MyClass::GET;
}
};
Run Code Online (Sandbox Code Playgroud)
C++ 11添加了一个enum class
将它们放在它们自己的嵌套范围内(这样你必须在它们的前面加上[... ::MyClass::
] kHTTPMethods::
),但是你必须改变你的代码来使用它:
class MyClass
{
public:
enum class kHTTPMethods {GET,PUT,POST}; // note "class" after "enum"
void func() {
kHTTPMethods method = kHTTPMethods::GET;
}
};
Run Code Online (Sandbox Code Playgroud)
对于你的第二个问题,是的 - 这是关于它的大小,虽然我会像上面的说法一样.