类成员函数中的c++枚举

C++ enum in class member functions

本文关键字:c++ 枚举 成员 函数      更新时间:2023-10-16

对于类中的枚举…

不正确:

class MyClass{
             public:
               enum kHTTPMethods {GET,PUT,POST}
};
void MyClass::Func(){
    kHTTPMethods method = kHTTPMethod.GET;
}

1)我是否正确地说这不起作用,因为.操作符只能用于类的对象(实例)?

正确的:

void MyClass::Func(){
    kHTTPMethods method = GET; 
}

2)我是否可以说这是正确的,因为类的所有元素都在类中成为全局作用域?

嗯,对于你的第一个问题,问题是枚举被放在class MyClass的范围内。不管你有没有对象,.都不允许你引用枚举,你需要::来引用特定范围内的东西。下面的代码可以编译,但是修正后的MyClass::作用域不是必要的,也不是有用的(也就是说,你可以只说method = GET,因为funcGET在同一个作用域)。

class MyClass
{
  public:
    enum kHTTPMethods {GET,PUT,POST};
    void func() {
        kHTTPMethods method = MyClass::GET;
    }
};

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;
    }
};

对于你的第二个问题,是的,这是关于它的大小,尽管我会像上面那样表达它。

对于你的第一个问题,是。据我所知,.操作符只用于对象上访问成员变量和成员方法。

回答你的第二个问题。是的。

MyClass::Func(){}括号内的所有内容都具有类作用域,因为MyClass::在Func()之前。同时,GET也具有类作用域。因此,您可以直接引用GET