使用宏时,错误枚举没有成员
error enum has no member when using macro
我想创建两个枚举:DerivedBirdType
和BasicBirdType
。BasicBirdType的成员名为BCT_*。DerivedBirdType拥有BasicBirdType中的所有成员,但具有不同的前缀DCT_*,并且它也拥有不在BasicBirdType中的成员。
例如,BasicBirdType有两个成员,*BCT_waterfowl*和*BCT_loons*。和派生鸟类型将有*DCT_waterfowl*, *DCT_loons*和一个新成员*DCT_Obama*。
我有三个文件。Bird.h
声明了重用通用名称的枚举结构和令牌解析运算符。DerivedBirdType.h
重用BasicBirdType.h
中的成员,并增加额外的成员。
问题是BasicBirdType
现在没有成员"BCT_waterfowl"当我试图获得BCT_*,而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)
你的问题是,头文件"BasicBirdType.h"已经包括当你包括头文件"DerivedBirdType.h",因此,当你包括BasicBirdType在基本枚举,编译器删除它,因为它已经包括
enum BasicBirdType
{
#include "BasicBirdType.h" // no effect, file already included
TotalBasicBirdTypes
};
这就是除了TotalBasicBirdTypes
相关文章:
- 枚举成员与静态 int 成员?
- 从类访问枚举成员
- 枚举成员不是类型错误
- std::映射键作为模板化结构与枚举成员
- 设置类的枚举成员无效地使用"枚举"
- 如何访问结构和枚举成员形成一类
- 是否可以在 constexpr 函数中遍历枚举成员,因此值为 constexpr
- 获取 [枚举成员?] 的封闭类型
- 如何使用 SWIG 枚举枚举成员
- 通过int值访问枚举成员
- '='应初始化所有枚举成员或仅初始化第一个枚举成员;
- 为什么可以获取此枚举成员值,而不必先深入研究嵌套枚举
- 将具有枚举成员的非托管结构封送到 C#
- 为类模板的枚举成员定义 std::hash
- 缩短C++枚举成员的路径(使用 typedef 或 typename),以用作模板参数
- C++类枚举成员变量
- 检查是否已定义枚举成员
- 为什么要使用这段代码来获取枚举成员的数量?
- 使用枚举成员模板化成员函数
- 使用咬运算符了解枚举成员的初始化