1

我有像下面这样的课

#include <iostream>

#define Gb MemorySizeUnit.Gb
#define Mb MemorySizeUnit.Mb
#define Kb MemorySizeUnit.Kb

using namespace std;

enum MemorySizeUnit {Gb, Mb, Kb};

class Test
{
  private:
  MemorySizeUnit memSizeUnit;
  int memorySize;

  public:
  void setMemory(const int memSize, MemorySizeUnit unit);
 }

我希望能够做类似的事情

Test test;
test.setMemory(20, Gb);// as opposed to test.setMemory(20, MemorySizeUnit.Gb)

编译器不喜欢#define 中的那个,我有一个“。”

4

2 回答 2

5

在宏扩展中使用点并没有错,错误来自这样一个事实,即当宏在您的枚举定义中展开时,它会导致无效的枚举定义。

enum MemorySizeUnit {Gb, Mb, Kb};

扩展为:

enum MemorySizeUnit {MemorySizeUnit.Gb, MemorySizeUnit.Mb, MemorySizeUnit.Kb};

这不是你想要的。

于 2012-08-05T17:08:55.943 回答
2

只需#define完全删除,枚举值就会自动放置在外部命名空间中。与 C# 或 Java 不同,枚举值必须通过枚举名称命名空间访问,absnet 类似using声明。

于 2012-08-05T17:09:01.023 回答