尝试从基类访问受保护的构造函数时出现错误 C2248
Getting error C2248 when trying to access protected constructors from a base class
在Stroustrup的编程:原则和实践中使用C++他有一个图形库(FLTK(的包装器,它对基类有以下定义:
class Shape {
protected:
Shape() { }
Shape(initializer_list<Point> lst);
//more irrelevant code below
}
和一个派生类
struct Open_polyline : Shape {
public:
using Shape::Shape;
//more irrelevant code here
}
当我尝试像这样使用 Open_polyline 的假定继承构造函数时:
Open_polyline opl{ {100,100}, {150,150},{200,200},{250,250} };
我收到编译器错误 C2248 指出
"Graph_lib::Open_polyline::Open_polyline":无法访问类"Graph_lib::Open_polyline"中声明的受保护成员
我在网上阅读了有关"using"关键字的信息,并认为它可能会通过保护Open_polyline的构造函数而导致问题,因此我将Open_polyline的定义编辑为:
struct Open_polyline : Shape {
public:
Open_polyline() {};
Open_polyline(initializer_list<Point> lst) : Shape(lst) {};
}
但我仍然收到相同的错误消息。如何使用受保护基类的构造函数?
从这个继承构造函数引用:
如果重载解析选择了继承的构造函数,则在用于构造相应基类的对象时可访问该构造函数时,如果该构造函数可访问该构造函数,则该构造函数是可访问的:引入它的 using-声明的可访问性将被忽略。
[强调我的]
对于其他成员(函数、变量(,它按照您的意图工作,但不适用于构造函数。
第二个示例的问题在于,Shape
基类没有默认构造函数。这意味着您也不能默认构造Open_polyline
类(因为这隐式需要能够默认构造基Shape
类(。
您可以通过向 Shape
类添加默认构造函数来解决此问题。或者通过删除Open_polyline
默认构造函数。
您使用了私有继承。尝试写这个
struct Open_polyline : public Shape { ...
相关文章:
- 尝试从基类访问受保护的构造函数时出现错误 C2248
- MVSE12中出现错误C2248,std::thread
- 错误 C2248:"std::unique_ptr<_Ty>::unique_ptr":无法访问类"std::unique_ptr<_Ty>"中声明的私有成员
- 错误 C2248:无法访问类中声明的受保护成员
- Visual Studio 2012错误C2248在STD ::线程中
- 尝试初始化MFC CCcriticalSection时出现错误C2248
- 错误C2248:无法访问类中声明的私有成员,运算符=
- 在这种情况下,如何正确使用ifstream的引用?错误C2248
- 错误 C2248:'CObject::CObject':无法访问类 'CObject' afxwin.h 中声明的私有成员
- 错误C2248,这个错误是什么?我该如何修复它
- 错误 C2248:'std::promise<_Ty>::promise':无法访问类 'std::promise<_Ty>' 中声明的私有成员
- 使用Visual Studio 2012代码分析时出现错误C2248
- 再次出现错误 C2248
- 错误 C2248:无法访问在类中声明的私有成员,编译器行为异常
- 命名空间内出现错误 C2248 友元类
- 传递 CList 变量时会出现错误 C2248:"CObject::CObject":无法访问私有成员
- 无法访问在类"QReadWriteLock"中声明的私有成员错误 1 错误 C2248:'QReadWriteLock::QReadWriteLock'
- std::无法初始化私有嵌套结构的数组(错误 C2248)
- 错误C2248:无法访问类中声明的私有成员
- 链表访问私有成员错误C2248