我可以根据 private/protected 成员分配 class 枚举吗?

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

我有一个 class 并且需要使其受保护成员之一的大小 public 可用。

我无法创建字段public并且不想引入新的字段,所以我尝试引入一个枚举并将其分配给字段的大小,如下所示:

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

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

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

解决方法是在 enum.

上方设置 uint8_t myField;

在枚举声明中使用名称myField 时未声明。交换数据成员声明,​​如

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