【问题标题】:Can I assign a class enum based on a private/protected member?我可以根据私有/受保护成员分配类枚举吗?
【发布时间】:2020-01-25 17:58:52
【问题描述】:

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

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

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

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

【问题讨论】:

  • 你可以写一个像getFieldSize()这样的公共成员函数并返回sizeof。

标签: c++ class enums field member


【解决方案1】:

这是你在课堂上的顺序很重要的情况之一:myField 在达到sizeof(myField) 时不存在。

一种解决方法是将uint8_t myField; 置于enum 之上。

【讨论】:

  • 我想说的是,即使在课堂上,声明的顺序也很重要。例外的是成员函数定义可以引用它们之后的成员声明
  • @eerorika:1 个中的 6 个和其他我认为的 1/2 打。无论如何,我已经“不寻常”了。
  • 有一天,我希望 C++ 是一门两遍语言。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2016-07-15
    • 2023-03-03
    • 2011-01-06
    • 2018-09-03
    • 2017-02-05
    • 1970-01-01
    • 1970-01-01
    • 2022-07-20
    • 2012-05-03
    相关资源
    最近更新 更多