gpt4 book ai didi

c++ - 使用宏时错误枚举没有成员

转载 作者:行者123 更新时间:2023-11-28 03:14:56 24 4
gpt4 key购买 nike

我想创建两个枚举:DerivedBirdTypeBasicBirdType。 BasicBirdType 有像 BCT_* 这样命名的成员。 DerivedBirdType 具有 BasicBirdType 中的所有成员,但具有不同的前缀 DCT_*,并且它还有不在 BasicBirdType 中的成员。

例如,BasicBirdType 有两个成员,*BCT_waterfowl* 和 *BCT_loons*。 DerivedBirdType 将有 *DCT_waterfowl*、*DCT_loons* 和一个新成员 *DCT_Obama*。

我有 3 个文件。 Bird.h 声明了重用通用名称的枚举结构和 token 解析运算符。 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

鸟.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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com