【发布时间】:2014-01-27 17:59:04
【问题描述】:
假设如下布局:
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;
};
我应该能够在这里将Derived 的构造函数指定为公开吗? VC++ 报如下错误:
无法访问在“派生”类中声明的受保护成员
编译器在这里生成了 'Derived::Derived' [指向使用 Base::Base 线]
请参阅“派生”的声明
即它忽略了继承构造函数上方的访问修饰符。
这是该功能的限制吗? Base 类有一个公共构造函数没有任何意义,因为它永远不能被直接实例化(由于纯虚方法)。
【问题讨论】:
标签: c++ visual-c++ c++11 inheriting-constructors