为什么以下c ++ 11/14代码不起作用?在这里,我向前宣布课堂上的一个枚举。目标不是在类中有大量的枚举值 - 这使得类不可读。出于政治原因,我无法使用单独的范围枚举。
public void Voice() throws IOException {
Process p;
String work = "cmd /c nircmd.exe sendkey a press"; // used nircmd utility
p = Runtime.getRuntime().exec(work);
String output="";
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((output = reader.readLine()) !=null) {
System.out.println(output);
}
reader.close();
}
class A {
public:
// forward declare the enum
enum B : int;
void func (B b) {}
};
// The actual declaration
enum A::B : int {
Val1,
Val2,
};
int main ()
{
// B is unscoped. so I should be able to use it as below?
int a = A::Val1;
}
但以下代码有效:
tmp.cpp: In function ‘int main()’:
tmp.cpp:13:5: error: ‘A::B Val1’ is private
Val1,
^
tmp.cpp:19:16: error: within this context
int a = A::Val1;
^
答案 0 :(得分:0)
该错误出现在G ++中,但不出现在Visual C ++和clang中。正式枚举的id可以用作命名空间,也可以跳过,但最后两个默认跳过它,而最新的g ++强制执行它。这可以通过编译器选项进行更改。使用枚举类' id是强制性的:
class A {
public:
// forward declare the enum
enum class B : int;
void func (B b) {}
};
// The actual declaration
enum class A::B : int {
Val1,
Val2,
};
int main ()
{
int a = static_cast<int>(A::B::Val1); // no implicit cast
}