考虑以下:

class Class { public:
  enum Enum {
    FOO, BAR
  };
};

void routine(void) {
  int x = Class::Enum::FOO;  //Option 1

  int y = Class::FOO;        //Option 2

  using Alias = Class::Enum; //Option 3
  int z = Alias::FOO;

  using Class::Enum;         //Option 4 (line 15)
  int w = FOO;
}

选项1 是完全限定。

C++还允许选项2

编写的选项4 将失败; g++告诉我:
15 : error: using declaration cannot refer to class member
using Class::Enum;
~~~~~~~^
15 : note: use an alias declaration instead
using Class::Enum;
^

在将其拖到int w = FOO;行之前,

我认为g++暗示的是选项3 。不幸的是,这仍然需要令人讨厌的资格。

我的问题:是否可以通过某种方式固定上面的行来使int w = FOO;行编译?如果没有,为什么不呢?如果是,请解释。

最佳答案

#include <iostream>

class Class { public:
    enum Enum {
        FOO, BAR
    };
};

using namespace std;

auto main() -> int
{
    int x = Class::Enum::FOO;  //Option 1
    cout << x << endl;

    int y = Class::FOO;        //Option 2
    cout << y << endl;

    using Alias = Class::Enum; //Option 3
    int z = Alias::FOO;
    cout << z << endl;

    static constexpr auto FOO = Class::FOO;         //Option 4 (line 15)
    int w = FOO;
    cout << w << endl;

    return 0;
}

关于c++ - 从类中的枚举中解析名称而没有资格,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31211666/

10-09 21:37