如何通过C ++中的开关运行类枚举

时间:2014-01-27 07:58:57

标签: c++ enums

我有两个相互并行的类。第一个是Room,第二个是Ship。在船上,我必须使用Room类来检查某些内容是否有效。我正在运行一个switch语句,因为我对不同的条目做了不同的事情。问题是从Room传入switch语句的定义变量是枚举,编译器不喜欢它。

这就是我所拥有的

bool Ship::checkRoom ( const Room& theRoom )
{
     switch (theRoom.getType)

作为参考,这是调用“getType”的地方:

inline RoomType getType() const { return mType; };

3 个答案:

答案 0 :(得分:1)

您可以将类枚举值传递给switch语句。但是你需要调用函数:

switch (theRoom.getType())

这是一个有效的例子:

enum class FOO { A, B };

struct Foo
{
  FOO getFoo() const { return FOO::A; }
};

int main()
{
  Foo f;
  switch (f.getFoo())
  {
    case FOO::A:
    case FOO::B:
      break;
    default:
      break;
  } 
}

答案 1 :(得分:0)

您正在将函数传递给switch,而不是enum。因此,您应该调用该函数以在交换机中使用其返回值。

长话短说 - 你错过了括号。

switch (theRoom.getType)

需要

// --------------------vv
switch (theRoom.getType())

答案 2 :(得分:0)

可以在C ++中启用枚举,因为它们是整数类型。实际上,它很有用,因为您可以在案例标签中使用枚举器值,这样可以使您的程序更清晰。

你所拥有的本质上是一个拼写错误:theRoom.getType是函数的地址,具有你不应该打开的数据类型。

您需要使用switch (theRoom.getType())。注意括号。