是否可以基于私有/受保护成员分配类枚举?

Can I assign a class enum based on a private/protected member?

本文关键字:分配 成员 枚举 受保护 于私 是否      更新时间:2023-10-16

我有一个类,需要公开其受保护成员之一的大小。

我无法公开字段,也不想引入新字段,因此我正在尝试引入一个枚举并将其分配给字段的大小,如下所示:

class MyObject
{
public:
enum
{
myFieldSize = sizeof(myField),
};
protected:
uint8_t myField;
}

但是我的编译器告诉我它找不到"myField"的声明。这是预期的行为吗?我还有其他访问myField的公共函数,为什么枚举似乎无法这样做?

这是类中内容的顺序很重要的实例之一:myField在到达sizeof(myField)点时不存在。

解决方法是将uint8_t myField;放在enum上方。

在枚举声明中使用名称 myField 时,不会声明该名称。交换数据成员声明,例如

class MyObject
{
protected:
uint8_t myField;
public:
enum
{
myFieldSize = sizeof(myField),
};
};