我想创建两个枚举:DerivedBirdType
和BasicBirdType
. BasicBirdType 有名为 BCT_* 的成员。DerivedBirdType 具有 BasicBirdType 中的所有成员,但具有不同的前缀 DCT_*,并且它也具有 BasicBirdType 中没有的成员。
例如,BasicBirdType 有两个成员,*BCT_waterfowl* 和 *BCT_loons*。DerivedBirdType 将拥有*DCT_waterfowl*、*DCT_loons* 和一个新成员*DCT_Obama*。
我有 3 个文件。Bird.h
声明重用通用名称的枚举结构和令牌解析运算符。DerivedBirdType.h
重用成员BasicBirdType.h
并添加额外的成员。
现在的问题是BasicBirdType
当我尝试获取 BCT_* 时没有成员“BCT_waterfowl”,而DerivedBirdType
工作正常。
BasicBirdType bird1 = BasicBirdType::BCT_waterfowl; // enum `BasicBirdType` now has no member "BCT_waterfowl"
DerivedBirdType bird2 = DerivedBirdType::DCT_waterfowl; // works fine
鸟.h:
#pragma once
#define BASIC_BIRD_TYPE(type) BCT_##type,
#define DERIVED_BIRD_TYPE(type) DCT_##type,
namespace Bird
{
enum DerivedBirdType
{
#include "DerivedBirdType.h"
TotalDerivedBirdTypes
};
enum BasicBirdType
{
#include "BasicBirdType.h"
TotalBasicBirdTypes
};
}
DerivedBirdType.h:
#pragma once
#define BASIC_BIRD_TYPE(type) DERIVED_BIRD_TYPE(type)
#include "BasicBirdType.h"
DERIVED_BIRD_TYPE(Obama)
BasicBirdType.h:
#pragma once
BASIC_BIRD_TYPE(waterfowl)
BASIC_BIRD_TYPE(loons)