我在C中收到以下错误:
error C2614: ‘ChildClass’ : illegal member initialization: ‘var1’ is
not a base or member
Class Base { protected: int var1; public: Base() { var1=0; } } class Child : public Base { int chld; public: Child() : var1(0) { chld=1; } }
我觉得我所做的是按照OO协议.
这里var1是具有受保护作为访问说明符的Base类的数据成员.所以它可以被继承,它将成为私人的孩子.
不明白为什么我收到错误?
有人可以帮我吗
谢谢.
解决方法
错误消息为您提供的确切原因不起作用:您只能使用具有直接成员或基类的初始化程序列表.
在你的情况下,你甚至不需要初始化var1,因为Base :: Base()将被Child的构造函数调用,这将把var1设置为0.
如果你想要一个不同的值,那么你必须重载Base构造函数并明确地调用它:
class Base { protected: int var1; public: Base() : var1(0) { } Base(int x) : var1(x) { } }; class Child:public Base { int chld; public: Child(): Base(42),chld(1) { } };