我想创建两个枚举: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
Bird.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)
答案 0 :(得分:2)
你的问题是当你包含头文件“DerivedBirdType.h”时已经包含了头文件“BasicBirdType.h”,因此当你在Basic枚举中包含BasicBirdType时,编译器会删除它,因为它已经被包含了
enum BasicBirdType
{
#include "BasicBirdType.h" // no effect, file already included
TotalBasicBirdTypes
};
除了TotalBasicBirdTypes之外,这就是BasicBirdType枚举为空的原因