我的课程如下
#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中不喜欢它,我有一个“。”
答案 0 :(得分:5)
在宏扩展中有一个点是没有错的,错误来自这样一个事实,即当你的枚举定义中扩展宏时,它会导致无效的枚举定义。
enum MemorySizeUnit {Gb, Mb, Kb};
扩展为:
enum MemorySizeUnit {MemorySizeUnit.Gb, MemorySizeUnit.Mb, MemorySizeUnit.Kb};
这不是你想要的。
答案 1 :(得分:2)
完全删除#define
,枚举值会自动放在外部命名空间中。它不像C#或Java那样必须通过枚举名称命名空间访问枚举值,absnet a using
- 就像声明一样。