相关疑难解决方法(0)

C++ 11继承构造函数和访问修饰符

假设以下布局:

class Base
{
protected:
    Base(P1 p1, P2 p2, P3 p3);

public:
    virtual void SomeMethod() = 0;
}

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

public:
    virtual void SomeMethod() override;
};
Run Code Online (Sandbox Code Playgroud)

我应该能够在Derived这里指定公共构造函数吗?VC++给出以下错误:

无法访问类'Derived'中声明的受保护成员
编译器已在此处生成'Derived :: Derived'[指向使用Base :: Base行]
请参阅'Derived'的声明

即它忽略了继承构造函数上方的访问修饰符.

这是该功能的限制吗?Base对于具有公共构造函数的类没有任何意义,因为它永远不能直接实例化(由于纯虚方法).

c++ visual-c++ c++11 inheriting-constructors

37
推荐指数
1
解决办法
1912
查看次数

标签 统计

c++ ×1

c++11 ×1

inheriting-constructors ×1

visual-c++ ×1