#define中的一个点

时间:2012-08-05 17:06:03

标签: c++

我的课程如下

#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中不喜欢它,我有一个“。”

2 个答案:

答案 0 :(得分:5)

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

enum MemorySizeUnit {Gb, Mb, Kb};

扩展为:

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

这不是你想要的。

答案 1 :(得分:2)

完全删除#define,枚举值会自动放在外部命名空间中。它不像C#或Java那样必须通过枚举名称命名空间访问枚举值,absnet a using - 就像声明一样。