首页 > 解决方案 > 将基类中的受保护枚举类用作派生类中的公共枚举类的问题 [MSVC 2019]

问题描述

我们遇到了如下情况。

我们试图通过派生类从包含它的类外部访问protected嵌套,方法是使用关键字在派生类中声明相同的枚举。enum classpublicusing

我们使用的是 MSVC2019 编译器,以下代码无法编译。它会导致 C2248 错误,指出我们无法访问受保护的枚举。我也尝试过使用 GCC,然后它似乎编译得很好,就像我预期的那样。

我希望那里有人可以解释这个?

虽然不是在寻找我们已经找到的解决方法。

#include <iostream>

class Base
{
protected:
  enum class Field
  {
    A,
    B
  };

};

class Derived :
  public Base
{
public:
  using Base::Field;

  Derived(Field f);
  
};

Derived::Derived(Field f) {  
  switch (f)
  {
  case Field::A:
    std::cout << "A" << std::endl;
    break;
    
  case Field::B:
    std::cout << "B" << std::endl;
    break;
  }
}

int main()
{
  Derived d(Derived::Field::B);

  return 0;
}

标签: c++visual-c++

解决方案


推荐阅读