考虑以下:
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/