我想创建两个枚举: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
中的成员并添加额外的成员。
问题是当我尝试获取BCT_ *时,BasicBirdType
现在没有成员“ 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)
最佳答案
您的问题是,当您包含头文件“ DerivedBirdType.h”时,已经包含了头文件“ BasicBirdType.h”,因此,当您在Basic枚举中包含BasicBirdType时,编译器会删除它,因为它已经包含了
enum BasicBirdType
{
#include "BasicBirdType.h" // no effect, file already included
TotalBasicBirdTypes
};
这是除TotalBasicBirdTypes之外BasicBirdType枚举为空的原因
关于c++ - 使用宏时错误枚举没有成员,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17205747/